当您使用 React 并拥有同一组件的多个实例时,管理状态可能会变得很棘手。根据组件需要交互的方式,您需要以不同的方式处理状态。这是我发现效果很好的方法。
如果您的组件不需要相互通信,最好将它们的状态保留在组件内。这样,每个实例都有自己的状态,其中一个实例的更改不会影响其他实例。
function Counter() { const [count, setCount] = useState(0); return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); } // Usage <Counter /> // Instance 1 <Counter /> // Instance 2
在这里,每个计数器组件都会跟踪自己的计数。因此,如果您单击一个计数器中的按钮,则不会更改另一个计数器中的计数。
但是如果组件需要共享某些状态或以协调的方式工作,最好将状态向上移动到父组件。父级可以管理共享状态并将其作为 props 传递下来。这可确保所有实例保持同步并顺利协同工作。
function Parent() { const [sharedCount, setSharedCount] = useState(0); return ( <div> <p>Total Count: {sharedCount}</p> <Counter count={sharedCount} setCount={setSharedCount} /> <Counter count={sharedCount} setCount={setSharedCount} /> </div> ); } function Counter({ count, setCount }) { return ( <div> <p>Count: {count}</p> <button onClick={() => setCount(count + 1)}>Increment</button> </div> ); }
这种方法之所以有效,是因为当状态位于父组件中时,对该状态的任何更新都会触发所有实例的重新渲染,确保它们都显示最新的 UI。如果状态单独保存在每个实例中,则只有状态发生更改的实例才会重新渲染,从而导致实例之间的 UI 不一致。
我的项目示例
我在构建手风琴组件时发现了这一点。以下是我自己作品中的两个例子:
独立的手风琴实例:示例。在此设置中,每个手风琴实例独立工作。
依赖的手风琴实例:示例。在此版本中,所有手风琴实例相互依赖并保持同步。
快速回顾
如果组件单独工作,请在每个组件内保留状态。
如果他们需要共享状态或以协调的方式一起工作,请在父级中管理状态。
在构建这些手风琴示例时,这种方法对我产生了很大的影响。希望对你也有帮助!
以上是在 React 中管理同一组件的多个实例中的状态的详细内容。更多信息请关注PHP中文网其他相关文章!