在React中使用

Connect()

利用react-redux的connect函数,我们能轻易地把redux数据注入到react的props中

  1. import React, { PureComponent } from 'react';
  2. import { connect } from 'react-redux';
  3. import { firstModel } from './FirstModel';
  4.  
  5. type Props = ReturnType<typeof mapStateToProps>;
  6.  
  7. class App extends PureComponent<Props> {
  8. render() {
  9. const { counter } = this.props;
  10.  
  11. return <div>{counter}</div>;
  12. }
  13. }
  14.  
  15. const mapStateToProps = () => {
  16. return {
  17. // 在这里注入
  18. counter: firstModel.data.counter,
  19. };
  20. };
  21.  
  22. export default connect(mapStateToProps)(App);

Hooks

!> 如果你想使用react的hooks特性,请确保react的版本在16.8.3+以及react-redux的版本在7.1.0+

利用最新的hooks特性,你可以再次精简业务代码。如果你的项目允许使用hooks,那么我推荐你这么做。

  1. import React, { FC } from 'react';
  2. import { firstModel } from './FirstModel';
  3.  
  4. const App: FC = () => {
  5. // 在这里注入
  6. const counter = firstModel.useData().counter;
  7.  
  8. return <div>{counter}</div>;
  9. }
  10.  
  11. export default App;

在hooks中,我们使用useData()获取reducer数据。它使用===的形式对比数据的变化,当数据有变更时,会自动触发组件重新渲染。

你也可以传入回调函数获取更深层的数据,这样可以提高React的渲染性能

  1. // 仅当Reducer中counter这个属性有变更时,才会re-render
  2. const counter = firstModel.useData((item) => item.counter);

通过.data虽然也能拿到数据,但是它不能让组件re-render