我有一个由WordPress预先呈现的HTML页面和三个React组件:
HTML页面中有两个ID div容器(
div
ID=“component”
和div
ID=“anotherComponent”
),它们是分开的,我想在上面呈现React组件。他们也有一些共同的状态。我想使用
我想使用
ReactDOM。渲染(
用这个最好的方法是什么?
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是异步的。回答前请阅读完整问题。 我试图用修改数组中的一个元素,但它没有按预期工作。 数组和修改它的函数: 因为是异步的,所以我知道数组可能不会立即更改,但是,在函数内部,即使经过几次重新渲染,结果也是相同的。 而不是: 我这样做: 然后在控制台内更新状态。在函数中生成日志,但没有重新渲染/组件更新。 我想了解为什么在第一种情况下在控制台的函数中。多次重新渲染后,日志结果相同