从几个地方ReactJS处理一个组件实例

时间:2018-01-08 09:40:20

标签: reactjs

我有一个组件实例,应该从不同的地方更新。 如何从少数其他组件更新此组件的道具?

class ParentComponent extends React.Component {

    ...

    render() {
        return (
            <div>
                <ChildComponent someValue={this.state.someValue} />
            </div>
        );
    }
}

class ChildComponent extends React.Component {

    ...

    render() {
        return (
            <div>
                ...
            </div>
        );
    }
}

class AdditionalComponent1 extends React.Component {
// I want to update 'someValue' in ChildComponent
}

class AdditionalComponent2 extends React.Component {
// I want to update 'someValue' in ChildComponent
}

我只需要一个ChildComponent实例

1 个答案:

答案 0 :(得分:1)

  

//我想在ChildComponent

中更新'someValue'

您无法在 ChildComponent内的中更新someValue因为ParentComponent作为道具传递,道具应该被视为只读取组件内部收到了他们。

您可以以某种方式通知someValue您要更新ParentComponent - 如果someValue更新ChildComponent,那么someValue也会收到新版本的ParentComponent (因为AdditionalComponent1生活在ParentComponent)状态。

如果ParentComponentAdditionalComponent1没有“简单”的层次关系(例如兄弟,孩子等),那么你可以使用观察者模式,其中ParentComponent会监听有趣的事件,{ {1}}发布此类活动。

More信息。

e.g。在comonentDidMount() { // from "anywhere" in your app you can publish event and listen here ObserverPatt.listen("eventName", ()=>{ this.setState({val:0}) }); } 听取事件并采取行动:

...

map

...