项目中一直在用React-Redux,抽空整理一下

项目中一直在用React-Redux,抽空整理一下,加深理解

React

React是单向数据流,没有数据向上回溯的能力,只能向下分发

React中有props和state

// 父组件
  _hideAddress = () => {
    console.log('o')
  }
  <ModifyAddress
    hideAddress={this._hideAddress}
  />
// 子组件
  <Modal
    onClick={this.props.hideAddress}
  />
  this.state = {
    visible: false,
  }

  this.setState({
    visible: true,
  })

Redux

Redux就作为一个专业的顶层将state分发给所有的组件

// action
const addTodo = (text) = {
    type: 'ADD_TODO',
    text
  }
dispatch(addTodo('new text'))
// 引入action
    import { todoApp } from './actions'
// 初始化 state
    const initialState = {
      text: ''
    }
// 现在可以处理 ADD_TODO。需要做的只是改变 state 中的 text
    const todoApp = (state = initialState, action) = {
      switch (action.type) {
        case 'ADD_TODO':
          return { ...state, text}
        default:
          return state
      }
    }
// 需要注意的是:
// 1. 不要改变state.
// 2. 如果遇到未知的action,返回久的state

React-Redux

一般不会直接把这两个库直接拿来用,而是用react-redux

react-redux提供一个Providerconnect

export default connect(mapStateToProps, mapDispatchToProps)(ComponentName)

mapStateToProps 你需要绑定一个函数,它的参数是state,返回你想要的几个值

const mapStateToProps = (state) => {
  return {
    newText: state.todoApp.text,
  }
}

mapDispatchToProps 声明好的action作为回调,它的参数是dispatch

// 绑定所有action以及参数的dispatch,可以作为属性在组件里面使用
const mapDispatchToProps = (dispatch) => ({
  dispatch
})
// 在组件中使用
this.props.dispatch(action(addTodo()))