实际上我们在实际的业务组件中需要使用就是两个函数,一个是connect函数,另外一个就是provider组件,直接将Provider映射为组件,在组件标签上将store传递给各业务的子组件。 connect函数的作用就是将我们的实际的业务组件与store进行关联,让我们在组件中可以方便的使用store以及修改store的相关的方法。

1、使用react-redux来改造计数器案例

原理:redux代替我们封装了connect函数和context函数。

  1. # 在父组件中进行使用 数据传递给子组件
  2. import React, { PureComponent } from 'react'
  3. import About from './16_react-redux/pages/About'
  4. import Home from './16_react-redux/pages/Home'
  5. // 引入StoreContext
  6. // import StoreContext from './16_react-redux/utils/context'
  7. // 引入store
  8. // import store from './16_react-redux/store'
  9. # 使用react-redux中的Provider 直接react-redux提供的高阶组件Provider 将组件映射为标签即可,将我们实际的业务组件放置于这个Provider高阶组件中即可
  10. import { Provider } from 'react-redux'
  11. import store from './16_react-redux/store'
  12. export default class App extends PureComponent {
  13. render() {
  14. return (
  15. <div>
  16. {/* 为组件提供context */}
  17. # 需要注意的是 我们在使用context的时候,在高阶组件中传值使用的是value属性,但是在react-redux中,他要求我们必须 使用store来传递数据 非常重要 不用这个属性的话 数据将无法进行传递
  18. <Provider store={store}>
  19. <About />
  20. <hr/>
  21. <Home />
  22. </Provider>
  23. </div>
  24. )
  25. }
  26. }

1.1 React-redux在实际业务组件中的使用

  1. import React, { PureComponent } from 'react'
  2. // import connect from '../utils/connect'
  3. // 引入react-redux中的connect函数 非常重要
  4. # import { connect } from 'react-redux'
  5. import {incrementAction, addNumberAction} from '../store/actionCreators'
  6. class About extends PureComponent {
  7. render() {
  8. return (
  9. <div>
  10. <h2>about组件</h2>
  11. <h2>当前技术:{this.props.counter}</h2>
  12. <button onClick={() => this.props.btn1Click() }>+1</button>
  13. <button onClick={() => this.props.btn2Click(5) }>+5</button>
  14. </div>
  15. )
  16. }
  17. }
  18. const mapStateToProps = state => {
  19. return {
  20. counter: state.counter
  21. }
  22. }
  23. const mapDispatchToProps = dispatch => {
  24. return {
  25. btn1Click() {
  26. dispatch(incrementAction())
  27. },
  28. btn2Click(num) {
  29. dispatch(addNumberAction(num))
  30. }
  31. }
  32. }
  33. // 使用react-redux中的contect函数
  34. export default connect(mapStateToProps, mapDispatchToProps)(About)

1.2 React-Redux的使用总结

  1. // react-redux的使用原理总结:
  2. 1、安装react-redux第三方库
  3. yarn add react-redux
  4. 2、在具体的业务组件中直接使用connect函数
  5. import { connect } from 'react-redux'
  6. // 定义变量
  7. const mapStateToProps = {}
  8. const mapStateToDispatch = {}
  9. export default connect(mapStateToProps, mapStateToDispatch)(ComponentName)
  10. 3、在跟组件中向下传递store
  11. import store from 'store/index.js';
  12. 使用Provider
  13. import { Provider } from 'react-redux';
  14. 映射为相应的标签 相当于将store以全局变量的方式都传递给了所有的子组件
  15. <Provider store={store}>
  16. <App />
  17. <Provider>
  18. 4、在类组件中可以直接使用this.props的属性来访问全局传入的store对象
  19. 在函数式组件中直接使用props来接收跟组件传递过来的参数