从完全独立的组件更新反应组件

时间:2018-02-28 19:18:44

标签: javascript reactjs

我正在寻找一种方法来根据对另一个的输入重新渲染一个反应组件。我正在使用没有Flux / Redux的反应并且已经承诺了足够的项目,我认为这不是我现在可以采取的方向。

我想做的事情看起来像这样:

class Component1 extends React.Component{
    constructor(props){
        super(props);

        window.global = 0;
        this.state = {};

        this.changeGlobal = this.changeGlobal.bind(this);
    }

     changeGlobal(value){
         window.global = value;
    }

    render(){

        return (<div> 
                <a onClick={() => changeGlobal(1)}>One</a>
                <a onClick={() => changeGlobal(2)}>Two</a>
               <a onClick={() => changeGlobal(3)}>Three</a>
               </div>);
    }
}


class Component2 extends React.Component
{
    constructor(props){
        super(props);
        this.state = {};
    }

    render(){

        if(window.global === 0){
             return <Something/>;
        }

        if(window.global === 1){
             return <SomethingElse/>;
        }

        etc...
    }
}

除了每次Component1更改全局值时我都希望Component2重新渲染。有谁知道如何实现这一目标?

2 个答案:

答案 0 :(得分:1)

我设法使用事件来实现这一目标:

faces = front_cascade.detectMultiScale(
    img,  # don't forget this!
    scaleFactor=1.1,
    minNeighbors=5,
    minsize=(30,30)
)

答案 1 :(得分:0)

Redux实现与React完全不同,它意味着您可以随时随地实现它,无论您想要什么,以及您只想要的组件,它都不是最好的编写代码也不是最好的练习,但仍有可能,只是说。好吧,如果你想正确更新一个组件(也就是要进行更改),你需要改变那个组件状态,否则,即使你完成了将一个值从一个组件传递到另一个组件,也永远不会呈现这些组件。

我不是这方面的专家,但我的建议是将Component2的状态链接到它的道具,因此可以通过外部组件进行修改。最常见的方法是将两个组件包装在父组件中,然后,每当Component1中的值发生更改时,它将触发将由父组件处理的事件(或函数),然后稍后将该值传递给Component2它的道具和(可能)触发一个将改变Component2状态的函数。