代码之家  ›  专栏  ›  技术社区  ›  t3__rry

功能道具使用效果最佳实践

  •  0
  • t3__rry  · 技术社区  · 6 年前

    我得到一个 load 功能 prop 从a 有联系的 容器和我正在考虑两种使用方式 useEffect 但我不知道哪一个可能被认为是最佳实践,这里是第一个:

    function MyComponent({ load }) {
      useEffect(() => {
        load();
      }, [load]);
    }
    

    这是我的第二个 read about 使用 useRef :

    function MyComponent({ load }) {
      const loadRef = useRef({ loadData: load});
    
      useEffect(() => {
        const { loadData } = loadRef.current;
    
        loadData(); 
      }, []);
    }
    

    我应该使用哪一个,为什么?

    3 回复  |  直到 6 年前
        1
  •  0
  •   tjugg    6 年前

    使用钩子,你可能想要的是使用useDispatch()

    并在useEffect内部调用useDispatch(actionCreator)。

        2
  •  0
  •   Sam    6 年前

    你需要调用一次Redux函数吗?

    只需使用

    useEffect(() => {
      load();
    }, []);
    

    您甚至可能不需要添加 load 在括号中,如果加载没有停止,这意味着组件在停止后没有重新渲染,您需要放置告诉生命周期方法的对象来重新渲染,因为加载已经完成,在大多数情况下,它是 isLoading 本地状态中的布尔值。

        3
  •  0
  •   Eugene    6 年前

    要调用某个东西一次,当组件刚刚挂载时,您可以使用带有空依赖项的钩子useEffect:

      useEffect(() => {
        load()
      }, [])
    

    更多信息 https://reactjs.org/docs/hooks-effect.html

    如果你想通过connect函数从redux映射负载函数,可以从props中获取负载函数。 更多信息 https://react-redux.js.org/api/connect

        4
  •  0
  •   tdev    6 年前

    只需使用:

      useEffect(() => {
          load();
        }
      []);
    

    这只是一个回调。如果你想调用一次,就不应该传递负载。 来自反应文档 https://reactjs.org/docs/hooks-effect.html :

    在上面的例子中,我们传递[count]作为第二个参数。这是什么意思?如果count为5,然后我们的组件在count仍然等于5的情况下重新渲染,React将比较前一次渲染的[5]和下次渲染的[5]。因为数组中的所有项都是相同的(5===5),React将跳过该效果。这就是我们的优化。

    当然,您可以通过redux使用调度,但我想在这种简单的情况下,调度事件有点脏。所以在我看来,使用useEffect钩子更干净。