javascript - React useState - 每个组件使用一个状态还是多个状态?

标签 javascript reactjs typescript react-hooks

使用 Hooks/Functional 组件来优化 React 并使代码更具可读性的更好方法是什么?每个组件有一个或多个 setState 钩子(Hook)?

为了扩展我的问题,请考虑以下内容:

通过钩子(Hook),我们可以使用多个状态,以某种方式更方便地分割特定用途的状态(例如,一个状态用于用户数据,另一个状态用于保存加载标志,其他状态用于为 API 检索的数据) , ETC)。在我的第一步中,我确信最好的方法是为我想要管理的每个数据设置多个状态......但是,一段时间后,当我想要时,我开始遇到多个状态之间的同步问题更新/读取效果函数 (useEffect) 中的多个状态。

所以,我开始相信使用 Hooks 管理状态的最佳方法是它只有一个使用对象的状态,并从这里管理我的所有数据...... 就像类组件一样...

const [data, setData] = useState({
    retrieveData: false,
    apiData: [],
    userInfo: [],
    showModal: false
})

// To update:
setData(oldData => {
    return { ...oldData, showModal: true }
})

// Or:
setData({ ...data, retrieveData: true })

在我看来,最好有一个状态,但这可能会以某种我没有考虑到的方式影响性能/可读性?

最佳答案

React 文档 suggests using multiple separate bits of state对于彼此独立变化的事物:

However, instead we recommend to split state into multiple state variables based on which values tend to change together.

(他们的重点)

这与例如内存(useMemouseCallback)配合得很好,因此您可以指示对 X 而不是 Y 的更改会使内存的项目无效。它还可以很好地编写您自己的钩子(Hook)(有关示例,请参阅链接的文档)。

关于javascript - React useState - 每个组件使用一个状态还是多个状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58607755/

相关文章:

javascript - 为什么这个 promise 返回未定义?

javascript - 无法从 React 外部在 ReactJS 组件上设置 State

javascript - 如何在 React Flux 架构中通过一个操作将数据传播到多个存储?

angular - 从 Angular 组件动态加载外部 javascript 文件

javascript - 如何在 JQuery DataTable 上动态创建 Bootstrap Popover

javascript - 如何以正确的方式表示两个日期之间的日期数组列表?

Javascript:生成范围内的随机数,避免前两个

reactjs - 获取 Fluent UI DetailsList 中的选定项目

angular - 处理将 API 对象映射到 UI 模型对象的模式

typescript - 你能用 TypeScript 解释一下这个奇怪的 ES6 箭头函数吗?