Reactjs 使用React钩子时将Redux状态设置为默认状态
我有一个redux操作,它获取所有数据并将其存储到全局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
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,仅在组件加载时运行。我修改了我原来的答案来说明这一点。