Reactjs 使用React钩子时将Redux状态设置为默认状态

Reactjs 使用React钩子时将Redux状态设置为默认状态,reactjs,redux,react-hooks,Reactjs,Redux,React Hooks,我有一个redux操作,它获取所有数据并将其存储到全局redux存储中 我希望使用钩子将该状态存储在本地状态中,以便在本地更改时不会更改实际状态 我现在正在做的是 const [filteredTable, setFilteredTable] = useState([]) useEffect(() => { props.fetchDatabase(); props.fetchOptions(); setFilteredTable(props.filtered_ta

我有一个redux操作,它获取所有数据并将其存储到全局redux存储中

我希望使用钩子将该状态存储在本地状态中,以便在本地更改时不会更改实际状态

我现在正在做的是

const [filteredTable, setFilteredTable] = useState([])

useEffect(() => {
    props.fetchDatabase();
    props.fetchOptions();
    setFilteredTable(props.filtered_table_data);
}, [])
在useffect中,props.fetchDatabase获取props.filtered_table_数据,我可以在console.log注销时看到这一点

但是,当我使用钩子将其存储到本地状态并检查它是否在其中时

console.logfilteredTable,“filteredTable”

就给我[]


我做错了什么?

useffect的回调,其中[]作为钩子的第二个参数,仅在组件刚装入时调用一次。在它的内部,会调用fetchDatabase和fetchOptions回调,然后当数据还没有被提取时,就调用setFilteredTable,这就是为什么filteredTable中会出现空数组的原因

不确定这是否回答了您的问题,但React-Redux提供了一些访问Redux存储的方法。 您可能感兴趣的是useSelector钩子

下面是一个示例用法:

import { useSelector } from 'react-redux';

const App = () => {
  const tableData = useSelector(state => state.tableData);
  ...
}
我相信props.fetchDatabase调用是异步的,因此当您尝试设置FilteredTable时,props.filtered_table_数据尚未更新

您可以尝试以下方法:

useEffect(() => {
    props.fetchDatabase();
    props.fetchOptions();
}, [])

useEffect(() => {
    setFilteredTable(props.filtered_table_data);
}, [props.filtered_table_data]);

请注意,每次过滤的\u表\u数据更改时,此效果都会运行,因此,如果要限制设置本地状态,您可能需要在回调中使用某种条件对代码进行包装。

有什么建议吗?一个可能的选项是添加另一个useEffect挂钩,该挂钩将查看筛选的\u表\u数据,并在其到达时调用setFilteredTable:useEffect=>setFilteredTablefiltered_table_data,[filtered_table_data]但我需要在组件加载时调用props.fetchData您仍然可以单独调用props.fetchDatabase,仅在组件加载时运行。我修改了我原来的答案来说明这一点。