Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在react中使用过多的useState挂钩。我如何重构它?_Javascript_Reactjs_React Hooks_React Component_Use State - Fatal编程技术网

Javascript 在react中使用过多的useState挂钩。我如何重构它?

Javascript 在react中使用过多的useState挂钩。我如何重构它?,javascript,reactjs,react-hooks,react-component,use-state,Javascript,Reactjs,React Hooks,React Component,Use State,useState钩子很棒。我主要使用useState钩子初始化某些状态,并且我还将函数传递给子组件以更改状态。然而,我意识到我开始在父页面组件中使用过多的useState钩子。这看起来和感觉都是错误的,因为我开始在父页面组件中使用大约6-10个useState钩子。 在不显示代码的情况下,有没有更好的方法?也许是更好的实践,或者是更好的重构方式。 谢谢每当您遇到这样的问题时,您应该首先查看是否可以将组件拆分为多个较小的组件。但是,在某些情况下,这不是一个选项。在这种情况下,我建议使用useRed

useState钩子很棒。我主要使用useState钩子初始化某些状态,并且我还将函数传递给子组件以更改状态。然而,我意识到我开始在父页面组件中使用过多的useState钩子。这看起来和感觉都是错误的,因为我开始在父页面组件中使用大约6-10个useState钩子。
在不显示代码的情况下,有没有更好的方法?也许是更好的实践,或者是更好的重构方式。

谢谢

每当您遇到这样的问题时,您应该首先查看是否可以将组件拆分为多个较小的组件。但是,在某些情况下,这不是一个选项。在这种情况下,我建议使用useReducer

// before

const {cache, setCache } = useState({});
const {posts, setPosts } = useState({});
const {loading, setLoading } = useState(false);

// Would become after refactor

const initialState = {
  cache: {},
  posts:{},
  loading: false
}

const [state, dispatch] = useReducer(reducer, initialState);

每当遇到这样的问题时,您应该首先查看是否可以将组件拆分为多个较小的组件。但是,在某些情况下,这不是一个选项。在这种情况下,我建议使用useReducer

// before

const {cache, setCache } = useState({});
const {posts, setPosts } = useState({});
const {loading, setLoading } = useState(false);

// Would become after refactor

const initialState = {
  cache: {},
  posts:{},
  loading: false
}

const [state, dispatch] = useReducer(reducer, initialState);

如果您的状态经常以可预测的方式更改,并且状态是相关的(例如,不只是表单中具有不同值的一组输入),那么useReducer可能是一个好方法。这可能会有所帮助。我同意罗伯特·摩尔的观点。我最近重构了一个因各个状态而膨胀的组件,这是一个重大改进。如果您的状态经常以可预测的方式更改,并且状态是相关的(例如,不只是一组具有不同值的表单中的输入),那么useReducer可能是一个不错的选择。这可能会有所帮助。我同意罗伯特·摩尔的观点。我最近重构了一个因各个状态而膨胀的组件,这是一个重大改进。再加上建议的阅读,这看起来简单多了,也更容易管理。谢谢从我的经验来看,它的性能更高。这看起来更简单,也更容易管理。谢谢从我的经验来看,这更有效