React redux 同步调用多个动作
React redux call multiple actions synchronously
我在店内有一个名为 visited:[]
的数组。在名为 changeInfo
的函数中,我首先需要清除数组,然后向数组添加一个项目。
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", visited);
dispatch(addToVisited(value));
console.log("after visited", visited);
};
有些人可能会争辩说我可以有一个像这样的动作类型 clearAndInsert
和 reducer
case CLEAR_AND_INSERT:
return {
visited: [action.payload],
};
但这不是我想要的。我想分派 clearVisited 并等到它清除数组之后,然后分派 addToVisited.Want 我正在获取 changeInfo
的控制台日志很奇怪。
如何在 React 中同步调用两个动作?
减速器是同步的。 dispatch(clearVisited());
完成后,商店已更新。然而,重新渲染一个 React 组件是 not 同步的,并且局部变量 visited
不会通过调度 action 来改变。所以你正在注销一个旧的局部变量,这会误导你认为 redux 存储没有更新。
如果您想验证商店是否已更新,即使组件尚未重新呈现,您也可以直接从商店获取最新状态
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", store.getState());
dispatch(addToVisited(value));
console.log("after visited", store.getState());
};
或者,如果您愿意等到组件重新呈现,您可以将日志语句放在组件的主体中,而不是 changeInfo 中。
console.log('rendering with', visited);
const changeInfo = (value) => {
dispatch(clearVisited());
dispatch(addToVisited(value));
};
这些值只会在它们的下一个 render() 中更新,因此您不能在同一个函数中读取值。在 useEffect 中添加控制台。
下面的方法只会打印旧值,不会更新
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", visited); //this will only console previous value, because it is not yet updated
dispatch(addToVisited(value));
console.log("after visited", visited); //this will only console same previous value, because it is not yet updated
};
你可以调用动作,它会一个接一个地更新reducer
你可以在useEffect中查看更新
useEffect(()=> {
console.log(visited)
},[visited])
我在店内有一个名为 visited:[]
的数组。在名为 changeInfo
的函数中,我首先需要清除数组,然后向数组添加一个项目。
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", visited);
dispatch(addToVisited(value));
console.log("after visited", visited);
};
有些人可能会争辩说我可以有一个像这样的动作类型 clearAndInsert
和 reducer
case CLEAR_AND_INSERT:
return {
visited: [action.payload],
};
但这不是我想要的。我想分派 clearVisited 并等到它清除数组之后,然后分派 addToVisited.Want 我正在获取 changeInfo
的控制台日志很奇怪。
如何在 React 中同步调用两个动作?
减速器是同步的。 dispatch(clearVisited());
完成后,商店已更新。然而,重新渲染一个 React 组件是 not 同步的,并且局部变量 visited
不会通过调度 action 来改变。所以你正在注销一个旧的局部变量,这会误导你认为 redux 存储没有更新。
如果您想验证商店是否已更新,即使组件尚未重新呈现,您也可以直接从商店获取最新状态
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", store.getState());
dispatch(addToVisited(value));
console.log("after visited", store.getState());
};
或者,如果您愿意等到组件重新呈现,您可以将日志语句放在组件的主体中,而不是 changeInfo 中。
console.log('rendering with', visited);
const changeInfo = (value) => {
dispatch(clearVisited());
dispatch(addToVisited(value));
};
这些值只会在它们的下一个 render() 中更新,因此您不能在同一个函数中读取值。在 useEffect 中添加控制台。
下面的方法只会打印旧值,不会更新
const changeInfo = (value) => {
dispatch(clearVisited());
console.log("before visited", visited); //this will only console previous value, because it is not yet updated
dispatch(addToVisited(value));
console.log("after visited", visited); //this will only console same previous value, because it is not yet updated
};
你可以调用动作,它会一个接一个地更新reducer
你可以在useEffect中查看更新
useEffect(()=> {
console.log(visited)
},[visited])