如何在类组件中使用 react-redux useSelector?
Posted
技术标签:
【中文标题】如何在类组件中使用 react-redux useSelector?【英文标题】:How can I use react-redux useSelector in class component? 【发布时间】:2019-11-29 19:54:39 【问题描述】:我是 react 新手,正在尝试学习 redux。我想访问类内的商店,但它给了我一个错误,我不能在类中使用钩子。
当我在函数中使用此代码时(正如我在 YouTube 教程中看到的那样),它可以正常工作。在这里我可以访问商店的柜台。
function App()
const counter = useSelector(state => state.counter);
return <div>counter</div>;
但是当我想在课堂上这样做时,它给了我一个错误,我不能在课堂上使用钩子。
那么如何在类组件中访问我的商店 useSelector 或 useDispatch?
【问题讨论】:
你为什么要在课堂上使用它 假设你想使用 didMount 调用 fetch 从服务器获取数据。现在在这种情况下有什么解决方案? 已经内置在钩子中 reactjs.org/docs/hooks-effect.html 在函数组件中使用 useEffect() 钩子来获得副作用,所以如果你想在 didMount 中调用函数,请在 useEffect 中调用它。 【参考方案1】:正如@Ying Zuo 所说,您的方法仅适用于功能组件。解决这个问题:
代替这一行:
const counter = useSelector(state => state.counter);
您可以这样定义计数器状态:
const mapStateToProps = state => (
counter: state.counter
);
那么对于调度,你应该像这样使用它:
const mapDispatchToProps = () => (
increment,
decrement
);
最后你像这样组合所有东西:
export default connect(
mapStateToProps,
mapDispatchToProps()
)(App);
不要忘记从action
导入increment
和decrement
,从react-redux
模块导入connect
。
【讨论】:
这个答案没有回答作者的问题。 @Medanko 你在什么范围内定义mapDispatchToProps
?【参考方案2】:
class App extends Component
constructor(props)
super(props)
this.state =
reduxState :
DummyView = () =>
const reducer = useSelector(state => state.reducer)
useEffect(() =>
this.setState(
reduxState : reducer
)
, [])
return null
render()
return(
<this.DummyView/>
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
【讨论】:
【参考方案3】:useSelector
和 useDispatch
是 React Hooks,只能在函数组件中工作。
https://reactjs.org/docs/hooks-overview.html#but-what-is-a-hook
使用 React Hooks,大多数组件都可以并且应该使用函数组件来编写。如果你必须写一个基于类的组件,你可以使用 react-redux 中的connect
。
https://blog.logrocket.com/react-redux-connect-when-and-how-to-use-it-f2a1edab2013/
【讨论】:
以上是关于如何在类组件中使用 react-redux useSelector?的主要内容,如果未能解决你的问题,请参考以下文章
React-redux mapStateToProps,mapDispatchToProps 如何使用
如何使用 React-Router 和 React-Redux 将道具发送到子路由组件?
Jest/Enzyme 单元测试:如何将存储传递给使用 redux 4 和 react-redux 6 连接功能的浅层组件