gpt4 book ai didi

javascript - 如何将 ReactDOM.render 与其他 ReactDOM.render 进行通信

转载 作者:行者123 更新时间:2023-11-30 14:21:35 26 4
gpt4 key购买 nike

我有一个包含 React 应用程序和其他 HTML 元素的项目。这意味着:

ReactDOM.render(<Element1/>, document.getElementById('element1')
<some section with HTML />
ReactDOM.render(<Element2/>, document.getElementById('element2')

问题是将变量/ Prop /状态从一个 ReactDOM.render 传递到另一个。

我该怎么做?

我目前正在使用全局变量 window , 但更改后它不会刷新第二个 ReactDOM.render 中的数据。

最佳答案

为了让两个 React 组件仅通过 React 有效地进行通信,它们应该通过共同的父级进行通信。

在两个不相关的小部件的情况下,它们可以呈现为具有共同父级的门户,如 this answer 中所建议的那样:

<div id="App"></div>
<h2>Foo widget</h2>
<div id="FooWidget"></div>
<h2>Bar widget</h2>
<div id="BarWidget"></div>

class App extends Component {
render() {
state = {
foo: 'foo',
setFoo(foo) {
this.setState(state => ({...state, foo}));
}
};

return <FoobarContext.Provider value={this.state}>
{ReactDOM.createPortal(<FooWidget />, document.getElementById('FooWidget'))}
{ReactDOM.createPortal(<BarWidget />, document.getElementById('BarWidget'))}
</FoobarContext.Provider>;
}
}

const FooWidget = props => <FoobarContext.Consumer>
{({ foo }) => foo}
</FoobarContext.Consumer>;

...

ReactDOM.render(<App />, document.getElementById('App'));

组件可以使用 setFoo setter 通过 foo 上下文属性进行通信。

可以使用 ReactDOM.render 的替代方法是使用 Redux 并将两个不相关的组件连接到同一个商店。他们可以通过公共(public)商店进行交流。

关于javascript - 如何将 ReactDOM.render 与其他 ReactDOM.render 进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660770/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com