当前位置: 首页 > 知识库问答 >
问题:

共享状态时渲染不同容器中的组件

楚德辉
2023-03-14

我有一个由WordPress预先呈现的HTML页面和三个React组件:

HTML页面中有两个ID div容器(divID=“component”divID=“anotherComponent”),它们是分开的,我想在上面呈现React组件。他们也有一些共同的状态。我想使用

我想使用ReactDOM。渲染(

用这个最好的方法是什么?


共有1个答案

贡英华
2023-03-14

ReactDOM。render类似于React应用程序的主要方法。所有与react相关的概念(如组件、状态和上下文)都从这里开始。您可以调用ReactDOM。使用相同的容器DOM节点或不同的容器DOM节点在同一页面上多次呈现。如果容器是相同的,这将对其执行更新,并且仅根据需要对DOM进行修改以反映最新的React元素。但是,如果容器节点不同,它将创建两个不同的React根,并且它们彼此完全独立。这两个React根之间没有共享状态或上下文,这与在同一页面上运行两个不同的React应用程序非常相似。

另外,在使用ReactDOM呈现根元素之后。将渲染到容器节点中,所有其他子体元素都将通过React在其中渲染,我们无法控制它们渲染的位置(这将在将来更改)。

因此,在您的情况下,如果您希望在不同的容器节点中呈现这两个组件,您将无法拥有保持共享状态或事件处理的应用程序组件。但是你可以创建两个不同的根,并通过道具在它们之间共享对象和方法。

const data = {/*...*/}

ReactDOM.render(<Component data={data} />,
  document.getElementById('component'));

ReactDOM.render(<AnotherComponent data={data} />,
  document.getElementById('anotherComponent'));

但是,如果您想在某个时候更改这些道具,则必须手动重新加载根组件。例如,如果您有一个每秒更新的计数器变量,则必须用每个新值重新命名根。

let couter = 0

setInterval(function(){
  counter++

  ReactDOM.render(<Component data={data} />,
    document.getElementById('component'));

  ReactDOM.render(<AnotherComponent data={data} />,
    document.getElementById('anotherComponent'));

}, 1000)

另一个好的选择是使用类似Redux的状态管理库。您可以拥有一个存储,并在两个根之间共享它。如果您需要在两个根之间共享一个非常复杂的状态,我强烈推荐这种方法。

const store = createStore(/* ... */)

// ...

ReactDOM.render(
    <Provider store={store}>
        <Component />
    </Provider>,
    document.getElementById('component')
);

ReactDOM.render(
    <Provider store={store}>
        <AnotherComponent />
    </Provider>,
    document.getElementById('anotherComponent')
);

使用Redux时,将您的组件另一个组件连接到存储高阶组件。在引擎盖下,这将订阅组件以存储更改,并在使用组件的forceUpdate方法更改状态时重新提交组件。因此,您不必手动调用ReactDOM。只要通过向存储分配操作来更改状态,就可以使用render方法。

 类似资料:
  • 我有一个基于url的react组件,它应该导入一些数据,然后在另一个子组件中显示。当页面首次加载时,它将初始数据作为组件状态加载到中。至于进一步的url更改,它们将在export default class Info()中处理。组成部分{ 我的问题是,尽管switch语句中有状态更新,但组件不会重新渲染。我不知道我的方法有什么问题。有人能帮我吗?谢谢 编辑:这是使用而不是的代码:

  • 我正在用反应原生构建一个项目。我有一个动态的玩家列表,我希望用户能够编辑。 我想实现的是: 用户输入名称 用户按enter键 我们称之为addPlayer,它添加一个播放器 新的输入出现并得到关注(通过其他功能) 我得到的是: < li >用户输入姓名 < li >用户按enter键 < li >我们调用addPlayer来添加播放器 < li >键盘开始关闭一会儿,然后在新输入出现时重新打开。

  • 问题内容: 我从React中学到的一件事是,如果组件的属性不变,那么React不会重新渲染组件。无状态组件也是如此吗?还是它们的行为更像“愚蠢的”函数,并且每次都会执行? 例如,如果我有: 当更新其价值,并获取重新渲染?还是像其他React组件一样足够“聪明”地看到其道具没有改变? 问题答案: 更新25.10.2018 从React 16.6开始,您可以将React.memo用于功能组件以防止重新

  • 实现的计划是向现有的DB连接添加DTO/TABLE。我将添加一个高优先级过滤器或auth机制,如果状态未设置,则检查缓存,然后检查数据库中的现有数据。对于auth机制实现,如果不存在状态或cookie,我将返回到default/super。 是我把这件事搞得太复杂了,有一个包可以管理它,还是这是问题的解决方案?任何反馈都将不胜感激!

  • 我有一个带有两组按钮(功能和目标)的界面。当我点击一个按钮时,我希望它从一个团队转到另一个团队。我正在用react和redux实现这一点。我唯一的问题是,当状态更新并且我成功地记录了更新的状态时,除非我使用forceUpdate(),否则组件不会更新。我不明白的是,既然状态更新成功,组件不应该自动重新渲染吗? 一些js 正如您所看到的,当我单击一个按钮时,我触发updateLists函数,该函数将

  • 我知道useState是异步的。回答前请阅读完整问题。 我试图用修改数组中的一个元素,但它没有按预期工作。 数组和修改它的函数: 因为是异步的,所以我知道数组可能不会立即更改,但是,在函数内部,即使经过几次重新渲染,结果也是相同的。 而不是: 我这样做: 然后在控制台内更新状态。在函数中生成日志,但没有重新渲染/组件更新。 我想了解为什么在第一种情况下在控制台的函数中。多次重新渲染后,日志结果相同