当前位置: 首页 > 面试题库 >

React Hooks:useEffect中的调度动作

翟渝
2023-03-14
问题内容

我的文件夹结构:

|--App
  |--Components
    |--PageA.js
    |--PageB.js
    |--PageC.js
  |--common-effects
    |--useFetching.js

我正在使用react hooks重构我的代码以从API获取数据。我想调度由 saga* 中间件截获的 useFetching.js 中的
useEffect 操作。仅当安装了组件( PageAPageBPageC )时才分派该动作。
* __

我正在使用 reduxreact-reduxredux-saga

PageA.js

function(props) {
  useFetching(actionParams)
  //....//
}

PageBPageC 组件的类似代码。

我已经抽象了可重用的代码以在useFetching Custom hook中 获取数据。

useFetching.js

const useFetching = actionArgs => {
  useEffect( () => {
    store.dispatch(action(actionArgs)); // does not work
  })
}

我不知道如何dispatchuseFetching中 访问redux 。我尝试了一下useReducer,但sagas错过了动作。


问题答案:

您将需要传递绑定动作创建者或dispatch对钩子的引用。这些将来自连接的组件,与您通常使用React-Redux的相同:

function MyComponent(props) {
    useFetching(props.fetchSomething);

    return <div>Doing some fetching!</div>
}

const mapDispatch = {
    fetchSomething
};

export default connect(null, mapDispatch)(MyComponent);

然后,该挂钩应调用效果中的绑定动作创建者,该动作创建者将相应地调度该动作。

另外,请注意,您的当前挂钩将在 每次 重新渲染组件时重新运行效果,而不仅仅是第一次。您需要像这样修改钩子:

const useFetching = someFetchActionCreator => {
  useEffect( () => {
    someFetchActionCreator();
  }, [])
}


 类似资料:
  • 例如,用Java编写的程序在很大程度上依赖于动态调度。

  • 问题内容: 在上面的程序中,我尝试调用 aObj.b时 遇到错误。 1.为什么我无法通过aObj访问该变量,尽管它引用的是B类? 2.为什么我可以使用show()方法? 问题答案: 你有区分 静态类型 的和 运行时类型 的。 代码如 产生具有静态类型和运行时类型的变量。 在决定允许或不允许的内容时,编译器也只会考虑 静态类型 。 对您的问题: 1.为什么我无法通过aObj访问该变量,尽管它引用的是

  • 我正在使用Apache POI将值输入电子表格。这些值有换行符,我能够成功地使用这段代码: 不幸的是,虽然文本包装正确,但行的高度并不总是增长到足以显示内容。如何确保我的行始终保持正确的高度?

  • DynamicHeights是一个动态表格元素高度(动态TableViewCell)的例子。实际应用场景在iOS开发中会经常遇到不规律的TableViewCell,往往需要根据内容的多少而动态调整这些Cell的大小。在http://www.cimgf.com/2009/09/23/uitableviewcell-dynamic-height/ 中,有详细的解说开发的流程以及这么处理的原因。里面的大

  • 动态调度标签即为根据设定的条件在资源调度前动态为宿主机绑定调度标签。 动态调度标签即为根据设定的条件在资源调度前动态为宿主机绑定调度标签,每次调度宿主机绑定的标签不一定相同,从而实现资源的灵活调度。 入口:在云管平台单击左上角导航菜单,在弹出的左侧菜单栏中单击 “主机/调度/动态调度标签” 菜单项,进入动态调度标签页面。 新建动态调度标签 该功能用于设置动态调度标签的条件,为符合动态调度标签条件的