React 如何更新另一个组件的状态?

Posted

技术标签:

【中文标题】React 如何更新另一个组件的状态?【英文标题】:React how to update another component's state? 【发布时间】:2016-05-12 01:37:57 【问题描述】:

我对反应很陌生,试图让一些组件工作。我有

    ObjectA:React.createClass(
        propTypes: 
           ...

        ,

        getInitialState: function() 
            return 
                myState: null
            
        ,

        updateMyState: function(value) 
           this.setState(
               myState: value
           )
        

        render: function() 
            return (<div className="my-class">'hello' +this.state.myState</div>);
          
    );

    ObjectB:React.createClass(
            propTypes: 
               ...

            ,

            render: function() 
                return (<div className="my-class"><ObjectA / >

            </div>);
            
        );

我想从 ObjectB 更新 ObjectA 的状态。我如何在 ObjectB 中调用 ObjectA 的 updateMyState 方法? 谢谢!

【问题讨论】:

@dvine 多媒体的 anwser 是正确的,而且由于 react-native 是基于 react,你可能想看看 react 概念:facebook.github.io/react/tips/… 【参考方案1】:

React 的基本思想是单向数据流。这意味着数据只能通过子组件的属性从祖先组件向下共享到其子组件。对于这个简单的示例,我们将类似 Flux 的架构和事件发射器排除在外,因为它根本没有必要。

从外部更改组件状态的唯一方法是更改​​它在父级渲染方法中接收到的道具。所以 myState 实际上会存在于 ObjectB 中,并作为属性提供给 ObjectA。在您的示例中,如下所示:

ObjectA:React.createClass(
    propTypes: 
       ...

    ,

    render: function() 
        return (<div className="my-class">'hello' + this.props.name </div>);
      
);

ObjectB:React.createClass(
    propTypes: 
       ...

    ,

    getInitialState: function() 
        return 
            name: null
        
    ,

    onNameChange: function(newName) 
        this.setState( name: newName )
    ,

    render: function() 
        return (
            <div className="my-class">
                <ObjectA name= this.state.name  />
            </div>
        );
    
);

【讨论】:

感谢您的详细解答。

以上是关于React 如何更新另一个组件的状态?的主要内容,如果未能解决你的问题,请参考以下文章

React 从另一个组件向有状态组件传递数据

如何在 React 中从另一个组件设置一个组件的状态

当另一个组件的状态发生变化时如何重新加载组件 React

React 和 Jest,如何测试更改状态并检查另一个组件

如何响应 redux 中的状态变化并派发另一个动作?

React 子组件在父组件中更新状态后如何将其重置回原始状态