ReactJS:如何从另一个组件更新组件

2024-01-05

我正在尝试写一个简单的textarea字符计数器小部件ReactJS http://facebook.github.io/react/学习如何使用它,但我现在知道如何通过火来设定价值textarea onChange event.

这就是我编写应用程序的方式:

/**
 * @jsx React.DOM
 */

var EditorWidget = React.createClass({
    render : function() {
        return (
            <div className="editor-widget">
                <h4 className="title">Titolo articolo</h4>
                <TextArea maxLength={this.props.maxLength}/>
                <footer>
                    <TextStatus maxLength={this.props.maxLength} currentLength={this.props.currentLength}/>
                    <ActionButton />
                </footer>
            </div>
        );
    }
});

var TextArea = React.createClass({
    onTextChanged : function(event) {
        // how to update currentLength for TextStatus component?
        this.props.currentLength = event.target.value.length;
    },
    render : function() {
        return (
            <textarea onChange={this.onTextChanged} maxLength={this.props.maxLength} placeholder="Lampadario con catino romagnolo"></textarea>
        );
    }
});

var TextStatus = React.createClass({
    render : function() {
        return (
            <div className="info">
                Caratteri<span className="small-left-margin">{this.props.currentLength} / {this.props.maxLength}</span>
            </div>
        );
    }
});

var ActionButton = React.createClass({
    render : function() {
        return (
            <div className="action remove">
                Rimuovi elemento
            </div>
        );
    }
});

React.renderComponent(
    <EditorWidget maxLength="15" currentLength="0"/>,
    document.getElementById("container")
);

From onTextChanged方法拥有者TextArea我不确定如何更改组件的状态TextStatus组件,我该如何设置currentLength of TextStatus成分?


您无法使用公共 API 修改 prop,只能修改state。所以我们应该首先将 currentLength 移动到 EditorWidget 的状态。我们将此方法添加到 EditorWidget 中:

getInitialState: function() {
    return {currentLength: 0};
},

并使用传递值this.state代替this.props: <TextStatus currentLength={this.state.currentLength}。每次 currentLength 更改时,TextStatus 都会更新为新值。

现在我们需要在每次文本区域发出 Change 事件时更新状态。我们可以将其分为 2 个步骤:textarea 向 TextStatus 组件发出 Change 事件,该组件通过发出携带新长度值的自定义事件进行反应。我们将此自定义事件称为“TextChange”。

我们从上到下进行。在 EditorWidget 中,我们为 TextChange 添加一个处理程序,用于读取长度并更新 currentLength:

handleTextChange: function(length) {
    this.setState({currentLength: length});
},

并传递它:<TextArea onTextChange={this.handleTextChange}。在 TextArea 中,我们添加一个 Change 处理程序,通过 onTextChange 发出新的长度:

handleChange : function(event) {
    var length = event.target.value.length;
    this.props.onTextChange(length);
},

并将其传递到文本区域:<textarea onChange={this.handleChange}.

我们完成了。每次用户在文本区域中键入一些文本时,事件都会在组件层次结构中向上冒泡到 EditorWidget,后者会更新其状态并触发其子级(包括 TextStatus)的重新渲染。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ReactJS:如何从另一个组件更新组件 的相关文章

随机推荐

  • 使用代理在 Windows 7 上安装 gems 时出现问题

    我正在尝试在 Windows 7 上通过代理安装 ruby 我查看了各种论坛并成功设置了 我认为 http proxy 见下文 SET HTTP PROXY http username password http proxyhere com
  • 为什么 matlab 有基于 1 的索引 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我之前曾使用 Java 和 Python 进行编程 但最近开始使用 MATLAB 来处理很多事情 特别是计算机视觉算法 然而 MATLAB 的数
  • PostgreSQL 中的并行 unnest() 和排序顺序

    我明白使用 SELECT unnest ARRAY 5 3 9 as id 没有ORDER BY子句中 不保证结果集的顺序 例如我可以得到 id 3 5 9 但是下面的请求呢 SELECT unnest ARRAY 5 3 9 as id
  • (可能)ODBC SQL Server 连接字符串中存在非法字符 PWD=

    根据我的研究 SQL Server 连接字符串的 PWD 字段中没有非法字符 但是 使用 SQL Server Express 2008 我将 SA 密码更改为 GUID 具体来说 85C86BD7 B15F 4C51 ADDA 3B6A5
  • 具有公共 getter 和私有 setter 的 Python 属性

    我有一个像这样的 python 属性 class Foo property def maxInputs self return self persistentMaxInputs value maxInputs setter def maxI
  • 如何使用 Google 日历 v3 访问其他用户的日历?

    我正在使用 Google Calendar v3 API 和 google apps 并且希望使用单个 oauth2 凭据来确定哪些用户在任何给定点有空 忙碌 我想用这个 https developers google com google
  • Javascript模拟在输入框中按Enter键

    我似乎对一个问题有一个简单的解决方案 但在网上尝试了大量不同的解决方案后 似乎没有什么对我有用 我有一个搜索字段 每次您在输入字段中键入或按 Enter 键时都会搜索数据表 但是在加载页面时为搜索框分配一个值后 它不会执行搜索 直到用户在输
  • 为什么无论我输入什么网址(可爬行的 GWT 应用程序),HTMLUnit 总是显示 HostPage?

    这是完整的代码 public class CrawlServlet implements Filter public static String getFullURL HttpServletRequest request StringBuf
  • 高效的 XMPP 用户搜索

    我想有效地检查所有本地地址簿联系人 如果他们有 jabber 帐户 用户使用手机号码在XMPP服务器上注册 我当前将以下 XEP 0055 节发送到 ejabberd 服务器并评估结果
  • 容器之间的连接被拒绝

    我尝试将运行 spring boot 2 应用程序的容器链接到运行 mongo 的容器 但连接被拒绝 docker compose 文件有一个 mongo 容器 稍后也会在此处添加另一个用于 spring boot 的容器 version
  • 如何识别这些图像中字母的颜色?

    我在用本文 https code msdn microsoft com windowsdesktop Solving Captcha with C dadf37cd解决验证码问题 它的工作原理是使用 AForge 从图像中删除背景 然后将
  • 如何在 JavaScript 中创建 url 预览?

    有人可以帮助我在 JavaScript 中创建 url 预览吗 我的意思是这样的 假设我的网站上有一个链接 我希望用户能够将鼠标悬停在该链接上 并弹出一个图像 显示链接目标的外观 不用担心 CSS 我已经可以正常工作了 我只需要实际的脚本来
  • 为什么我的 C# 程序在分析器中速度更快?

    我有一个相对较大的系统 到目前为止约 25000 行 用于监视无线电相关设备 它使用最新版本的 ZedGraph 显示图表等 该程序是在Win7下的VS2010上使用C 编写的 问题是 当我从 VS 中运行该程序时 它运行缓慢 当我从构建的
  • Excel VBA 查询访问失败

    我正在尝试使用 VBA 从 excel 查询访问文件 但出现错误rs Open queryStatement conn adOpenStatic adLockOptimistic 错误是 运行时错误 2147217904 80040e10
  • Visual Studio 2012 上的 vc++ 项目缺少 mfc110ud.dll

    我使用VS 2012 IDE在vc 中编写了一个vc 项目 它在我的系统中运行良好 当我尝试在其他系统 其中没有 VS2012 上运行时 我们收到 MFC110ud dll 丢失 错误 第一张图片 我尝试手动放置该 dll 但它说非法使用
  • 将函数添加到枚举

    是否可以在 TypeScript 中向 Enum 类型添加函数 例如 enum Mode landscape portrait the dream toString console log this Or class ModeExtensi
  • Lambda 表达式用于访问一个对象的属性,该属性是 C# 中另一个对象的属性

    我有这两门课 public class Contratos public int EntidadeFinanceiraId get set Column Nome public EntidadesFinanceiras entidadeFi
  • ITL(iTunes 库)格式

    我正在开发一个用于管理 iTunes 库 ITL 文件 的 Java 解决方案 ITL 格式是一种专有格式 我正在寻找有关 ITL 格式的实现或文档 但 Google 找不到任何有用的东西 有人有这方面的经验吗 在哪里可以找到更多信息 提前
  • jquery 有等价的 dojo.hitch() 吗?

    原谅我的无知 因为我对 jquery 不太熟悉 有没有相当于道场 hitch http dojotoolkit org reference guide 1 7 dojo hitch html 它返回一个保证在给定范围内执行的函数 编辑 根据
  • ReactJS:如何从另一个组件更新组件

    我正在尝试写一个简单的textarea字符计数器小部件ReactJS http facebook github io react 学习如何使用它 但我现在知道如何通过火来设定价值textarea onChange event 这就是我编写应