当您使用 React 并拥有同一组件的多个实例时,管理状态可能会变得很棘手。根据组件需要交互的方式,您需要以不同的方式处理状态。这是我发现效果很好的方法。
如果您的组件不需要相互通信,最好将它们的状态保留在组件内。这样,每个实例都有自己的状态,其中一个实例的更改不会影响其他实例。
function Counter() { const [count, setCount] = useState(0); return (); } // UsageCount: {count}
// Instance 1 // Instance 2
在这里,每个计数器组件都跟踪自己的计数。因此,如果您单击一个计数器中的按钮,则不会更改另一个计数器中的计数。
但是,如果组件需要共享某些状态或以协调的方式工作,最好将状态移至父组件。父级可以管理共享状态并将其作为 props 传递下来。这可确保所有实例保持同步并顺利协同工作。
function Parent() { const [sharedCount, setSharedCount] = useState(0); return (); } function Counter({ count, setCount }) { return (Total Count: {sharedCount}
); }Count: {count}
这种方法之所以有效,是因为当状态位于父组件中时,对该状态的任何更新都会触发所有实例的重新渲染,确保它们都显示最新的 UI。如果状态单独保存在每个实例中,则只有状态发生更改的实例才会重新渲染,从而导致实例之间的 UI 不一致。
我的项目示例
我在构建手风琴组件时发现了这一点。这是我自己工作中的两个例子:
独立手风琴实例:示例。在此设置中,每个手风琴实例独立工作。
依赖的手风琴实例:示例。在此版本中,所有手风琴实例相互依赖并保持同步。
快速回顾
如果组件单独工作,则将状态保存在每个组件内部。
如果它们需要共享状态或以协调的方式一起工作,请在父级中管理状态。
在构建这些手风琴示例时,这种方法对我产生了很大的影响。希望对你也有帮助!
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3