如何使 React 中的数据库更新和状态更改显示在所有连接的页面上?
How to make database updates and state changes in React show up across all connected pages?
我手头有一个任务,我有一个页面 A,我可以在其中拖放以重新排序显示为列表的某些组件和另一个页面 B,它只向用户显示列表而不允许对顺序,这两个页面应该保持更新它们的当前状态。页面 A 上的任何更改都应反映在页面 B 上,而无需重新加载。我确实将更改存储在 MongoDB 数据库中,刷新页面 B 会显示更新后的顺序。而且我知道我可以在不刷新页面的情况下更新页面,方法是让页面本身每隔 x 秒检查一次数据库的当前状况,但这感觉资源很重。有更好的方法吗?
这是我需要进行更改的片段。 dragAndDrop是一个prop item,在A页为真,在B页为假。
<React.Fragment>
{
dragAndDrop ?
(
<Draggable draggableId={result.id} index={index}>
{(provided, snapshot) => (
<div
className={snapshot.isDragging ? "result-card dragging" : "result-card"}
{...provided.draggableProps}
{...provided.dragHandleProps}
ref={provided.innerRef}
>
<div className="d-flex align-items-center">
<span className="math-result">= { result.result }</span>
<span className="calculation-title">{ result.title }</span>
<button className="cstm-btn-red" onClick={() => this.openModal()}>See Input</button>
<Modal open={this.state.isOpen} onClose={() => this.closeModal()}>
{ result.inputContent }
</Modal>
</div>
</div>
)}
</Draggable>
) :
(
<div className="result-card">
<div className="d-flex align-items-center">
<span className="math-result">= { result.result }</span>
<span className="calculation-title">{ result.title }</span>
<button className="cstm-btn-red" onClick={() => this.openModal()}>See Input</button>
<Modal open={this.state.isOpen} onClose={() => this.closeModal()}>
{ result.inputContent }
</Modal>
</div>
</div>
)
}
</React.Fragment>
我对 React JS 还是比较陌生,并且每天都在学习越来越多。我觉得应该在某个地方讨论我的问题。
但是我一直找不到它。所以,很抱歉 post 可能是重复的。
存储所有更新的简单方法是使用 Redux or Context API or the local storage 浏览器,您必须访问提供的链接才能了解更多信息。基本上,它们会存储用户所做的所有更改而无需重新加载任何页面,并且它会持续到用户关闭选项卡。
如果您想永久存储它们,我建议在他离开页面 A 后调用 API(您必须跟踪页面 URL 或使用 useEffect return 函数来调用这个 API - 这些对于初学者来说一开始似乎很难理解,但是一旦你理解了 useEffect 挂钩或 react-router 挂钩,就很容易做到这一点)
并将他的订单存储在数据库中,但同时更新 redux 状态或上下文 API 状态或本地存储。通常,我们为此使用 redux,与 Context 或本地存储相比,它具有很多优势。
我手头有一个任务,我有一个页面 A,我可以在其中拖放以重新排序显示为列表的某些组件和另一个页面 B,它只向用户显示列表而不允许对顺序,这两个页面应该保持更新它们的当前状态。页面 A 上的任何更改都应反映在页面 B 上,而无需重新加载。我确实将更改存储在 MongoDB 数据库中,刷新页面 B 会显示更新后的顺序。而且我知道我可以在不刷新页面的情况下更新页面,方法是让页面本身每隔 x 秒检查一次数据库的当前状况,但这感觉资源很重。有更好的方法吗?
这是我需要进行更改的片段。 dragAndDrop是一个prop item,在A页为真,在B页为假。
<React.Fragment>
{
dragAndDrop ?
(
<Draggable draggableId={result.id} index={index}>
{(provided, snapshot) => (
<div
className={snapshot.isDragging ? "result-card dragging" : "result-card"}
{...provided.draggableProps}
{...provided.dragHandleProps}
ref={provided.innerRef}
>
<div className="d-flex align-items-center">
<span className="math-result">= { result.result }</span>
<span className="calculation-title">{ result.title }</span>
<button className="cstm-btn-red" onClick={() => this.openModal()}>See Input</button>
<Modal open={this.state.isOpen} onClose={() => this.closeModal()}>
{ result.inputContent }
</Modal>
</div>
</div>
)}
</Draggable>
) :
(
<div className="result-card">
<div className="d-flex align-items-center">
<span className="math-result">= { result.result }</span>
<span className="calculation-title">{ result.title }</span>
<button className="cstm-btn-red" onClick={() => this.openModal()}>See Input</button>
<Modal open={this.state.isOpen} onClose={() => this.closeModal()}>
{ result.inputContent }
</Modal>
</div>
</div>
)
}
</React.Fragment>
我对 React JS 还是比较陌生,并且每天都在学习越来越多。我觉得应该在某个地方讨论我的问题。 但是我一直找不到它。所以,很抱歉 post 可能是重复的。
存储所有更新的简单方法是使用 Redux or Context API or the local storage 浏览器,您必须访问提供的链接才能了解更多信息。基本上,它们会存储用户所做的所有更改而无需重新加载任何页面,并且它会持续到用户关闭选项卡。
如果您想永久存储它们,我建议在他离开页面 A 后调用 API(您必须跟踪页面 URL 或使用 useEffect return 函数来调用这个 API - 这些对于初学者来说一开始似乎很难理解,但是一旦你理解了 useEffect 挂钩或 react-router 挂钩,就很容易做到这一点) 并将他的订单存储在数据库中,但同时更新 redux 状态或上下文 API 状态或本地存储。通常,我们为此使用 redux,与 Context 或本地存储相比,它具有很多优势。