使用React和Redux Hooks,为什么我的动作没有触发?

布鲁诺帕尔加

编辑:解决了!请看下面

我希望我的Blog组件fetchBlog在浏览器每次通过链接或刷新请求其URL时触发动作创建者。我想使用React useEffectHook以及React-ReduxuseDispatchuseSelectorHooks来做到这一点但是,只有在单击该页面的链接时,我的操作才会触发;我什至不明白为什么,即使在阅读了几种解释之后(例如官方文档)。

这是代码:

// Everything duly imported, or else VSC would yell at me

export default function Blog() {
  const dispatch = useDispatch();
    // slug is set here with useSelector, this always works
  useEffect(() => {
    dispatch(fetchBlog(slug))
  }, [slug, dispatch]);
  const blog = useSelector((state) => state.blogs[0]);
    // return renders the blog information from the blog constant
    // since the action does not fire, blog is undefined because state.blogs is an empty array
}

我知道,fetchBlog由于Redux DevTools以及我在那放置了刷新,刷新后不会触发debugger(并且后端日志不显示请求传入。)动作创建者本身和减速器必须正在工作;如果不是,则通过链接访问该页面时将无法正确加载该页面。

编辑:我已经决定useSelectoruseDispatch都不是问题的根源,如改变使用代码connectmapStateToPropsmapDispatchToProps给出了相同的结果。问题似乎在useEffect

html_programmer

我不清楚me从何而来。
理论上讲useEffect,每次渲染后都会运行一次。如果有多个参数,则当第二个参数中传递的数组参数之一更改时,它将运行回调。

创建一个useEffect带有空数组的数组作为第二个参数以“一次”运行它(例如,刷新时),或者检查段塞值。

检查仓库后进行编辑:

  • 它不会起作用,因为useEffect是在渲染之后运行的(虽然有人对此表示反对,但它包含在我的答案中)。仅在此异常之前(在本例中为null指针)之前抛出异常,才分派调用。
  • 您可以使用来从react-router获取该信息match,这可能对您来说很方便。

    export default function Blog({ match }) {
        const slug = match.params.slug;
    etc
    
  • git repo显示了如何将dispatch as作为数组参数添加到useEffect,这是不必要的。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么我的减速器没有收到我的动作?(使用React和Redux)

为什么我的redux-observable史诗没有被触发?

React / Redux:为什么我的动作没有在ComponentDidMount()中被调用?

为什么我的onClick事件没有在React上触发?

为什么我的最小和最大验证没有触发?

为什么即使我使用.each也只有一个元素触发动作?

为什么我的状态没有使用 react hooks 更新并使用 Effect

为什么在使用 React Hooks 时我的尺寸没有在调整大小时更新

为什么当我使用setClickable(true)时却没有显示点击动作

为什么这个 action.type 没有在我的 React/Redux 应用程序的 Reducer 中触发?

用 Enzyme 开玩笑,为什么在我的 React 组件测试中没有触发“toHaveBeenCalled”?

当我使用val()设置select的值时,为什么jquery change事件没有触发?

使用React Hooks,为什么我的事件处理程序以错误的状态触发?

为什么我的动作事件没有被触发?

使用React和Redux从不同的reducer调用动作

使用 React Hooks 和 Redux 重新渲染太多

你可以同时使用 React-hooks 和 redux 吗?

为什么在使用redux和react.js时我的道具会“不确定”?

使用React,为什么redux saga无法拦截动作?

没有使用react和redux在我的函数上定义dispatch

为什么使用 React Hooks、MomentJS 对象和间隔/超时更新状态不会触发重新渲染?

为什么当我接到电话时,peerjs 和 cordova-plugin-iosrtc 没有触发流上的事件?

使用钩子和 redux 工具包的 React-redux 调度动作 onclick

重构React代码,以使用Firebase RT数据库和Redux Hooks中的Redux状态

使用react,redux和redux形式对字段进行内联编辑。我应该这样吗?

为什么我的redux状态没有更新

为什么我没有通过 redux 获得实际状态?

为什么我的 redux 状态在分派后没有更新

为什么我的书没有安排在正确的书架上(React-Redux)?