reactjs - Redux Action 仅在刷新时调度,而不是在重定向后调度
问题描述
我使用了 history.push("/") 从另一个页面重定向到我的主页,并且主页有一个 ProjectList 组件来调度一个动作:
应用程序.js
function App(){
return(
<Router>
<NavBar></NavBar>
<Switch>
<Route
path="/createProject"
component={withAuthentication(CreateProjectPage)}
></Route>
<Route
exact
path="/"
component={withAuthentication(HomePage)}
></Route>
</Switch>
</Router>
);
}
export default App
创建项目页面
function CreateProject(){
const dispatch = useDispatch();
const history = useHistory();
const submitHandler = (e) => {
...
dispatch(createNewProject({...}));
history.push("/");
}
return (
<div>
...
<Button
onClick={submitHandler}
variant="contained"
color="primary"
>
Submit
</Button>
</div>
)
}
主页
export default function HomePage(props){
return (
<div>
<ProjectList level="one"/>
...
</div>
);
}
项目列表组件:
export default function ProjectList({level}){
console.log(level); //onRedirect, this gets called
const dispatch = useDispatch();
useEffect(() => {
console.log("dispatch returnAllProjects called") //onRedirect, this does not get called
dispatch(returnAllProjects());
}, [dispatch]);
...
return ...
}
只有在刷新时才会调用 returnAllProjects。这会导致获得未定义的对象。
任何帮助将不胜感激!
解决方案
location
如果您希望在重定向后调用效果,则应添加为依赖项:
import { useLocation } from 'react-router-dom';
export default function ProjectList({level}){
const location = useLocation(); // <--- listen to location
const dispatch = useDispatch();
useEffect(() => {
dispatch(returnAllProjects());
}, [dispatch, location]); //<--- location is added as dependency
...
return ...
}
推荐阅读
- nwjs - 如何让 NW.js 不忽略我的 win.title 集?
- mysql - 应用 CSV 转储时,日期更改为 0000-00-00 00:00:00
- php - CakePHP 在不同的模板上使用模型和控制器
- c++ - 有没有一种方法可以检测 Qt 中的字体是 Serif 还是 SansSerif?
- c++ - 将压缩位域用于结构的非 2 字节整数成员
- android - 相机 2 手动检查是否支持 ISO 和 SHUTTER_SPEED
- lifecycle - 如何在循环中使用求解函数?
- javascript - Swagger Ui 中的标签排序和操作
- c# - 在 C# SQL 查询中转义“\\”
- javascript - 使用 Javascript 从 HTML 页面调用时,Golang REST API PUT 和 DELETE 请求不起作用