当前位置: 首页 > 知识库问答 >
问题:

使用useContext和useReducer进行状态管理,并使用useEffect获取数据

熊嘉茂
2023-03-14

我有一个React应用程序,它使用useContext和useReducer管理其全局状态。我的BookList组件在装载时需要从服务器获取书籍。如果取书成功,则应将其存储到全局状态。

我的方法如下

function BookList() {
    const [state, dispatch] = useContext(BookContext);
    const [loading, setLoading] = useState(true);

    useEffect(() => {
        BookService
            .fetchBooks()
            .then(resp => {
                setLoading(false);
                dispatch({
                    type: FETCH_BOOKS,
                    books: resp.data
                });
            });
    }, []);

    return (
        <div>
            {loading
                ? "Loading ..."
                : state.books.map(book => (
                    <div key={book.id}>{`${book.title} - $${book.price}`}</div>))
            }
        </div>
    );
}

这工作但产生警告

React Hook useEffect缺少依赖项:“dispatch”。任何一个

我是否必须将dispatch添加到依赖项数组以消除警告,还是有更好的方法?

共有1个答案

邹山
2023-03-14

该警告在这里不太相关,因为文档建议从useffect的依赖项列表中省略dispatch,但您可以安全地将其放入依赖项数组中,因为它的标识始终是稳定的。

医生说:

React保证调度函数标识是稳定的,并且不会在重新呈现时更改。
这就是为什么从use效应或useCallback依赖列表中省略它是安全的。

 类似资料:
  • 我有以下Useffect钩子: 然而,我得到以下警告: React Hook useEffect缺少依赖项:“image.height”、“image.img”、“image.width”、“scaleProperties.scaleInstance”和“scaleProperties.scaleValueMm”。请包含它们或删除依赖项数组 Image和scaleProperties也是组件的状态

  • For example, here’s how you would select the object: And to fetch the counter’s currentValue, we can pass in a string array, where each string plucks a single property from the application state one a

  • 本文向大家介绍说说如何使用Vuex进行状态管理(小结),包括了说说如何使用Vuex进行状态管理(小结)的使用技巧和注意事项,需要的朋友参考一下 1 为什么需要状态管理 一个 Vue 组件分为数据(model)与视图(view)。当通过 methods 中的方法更新数据时,视图也会自动更新。 message.vue 效果: 这个示例中的 message 与 changeMessage() 只能在 m

  • 我正在使用react钩子和contextAPI开发一个简单的MERN stack todo应用程序,我使用axios从mongodb数据库获取数据,并使用useEffect设置initialState数组变量来模拟componentDidMount,然后initialState用作useReducer的参数。我的问题是子组件没有收到initialState,而是收到一个空数组,但是所有其他的道具,

  • 使用 san-store 进行应用状态管理,就要先接受它的理念: 单向流 全局唯一的应用状态源 状态更新模式单一,不能通过store直接更新应用状态 那么,使用 san-store 进行应用状态管理,和自己在组件里完成所有事情,有什么区别呢? 自己管理你的应用状态 自己在组件里完成所有事情,意味着你需要自己管理你的应用状态。经验丰富的开发人员能够凭着设计经验和直觉让应用良构,但在不断的迭代与新需求

  • 我的Spring批处理作业每3分钟运行一次。 步骤应为 每个用户的记录应该并行执行。每个用户最多可以有150k条记录。 每个用户都可以有更新和删除记录。更新记录应在删除之前运行。 更新/删除集应该自己并行运行。但严格来说,所有更新都应该在删除之前完成。 有谁能提出在多个级别实现并行性的最佳方法,并遵循更新和删除级别的顺序吗。我正在研究Spring异步执行器服务、并行流和其他Spring库。Rx,仅