react-redux


1.为什么用redux

React中 ,组件的数据是单向流动的,即数据从一个方向(父组件)流向子组件(通过props)。
因此,两个非父子组件的通信就相对麻烦,redux的出现就是state数据问题。
数据存放于全局,便于统一的配置、管理和维护。

2.redux原理

触发action改变state。
state的改变均通过action来改变。( 为reducer函数传入 state 和 action,并得到新的NewState
返回给store, store再把数据传回组 )件。

3.redux三大原则

1. 单一的数据源
   redux思想中,一个应用永远只有一个唯一的数据源。  待续..。
2. 状态只读
   state是只读的,唯一改变state的方法就是触发action。 待续...
3. 数据改变只能通过纯函数来执行
   在redux中,通过定义reducer来确定状态的修改,而每一个reducer都是纯函数,
   这意味着它没有副作用,即接收一定的输入,一定会得到一定的输出。                                       
   待续...

4.代码

// index.ts
import { createStore } from 'redux'

import reduce from './reduce'

console.log('reduce', reduce);

const store = createStore(reduce)


export default store
// reducer.ts
import { combineReducers } from 'redux'

const initdata: [] = []

const arr: {
  item: number
}[] = [
    {
      item: 1
    },
    {
      item: 2
    }
  ]
const oneState = (state = initdata, action: any) => {
  switch (action.type) {
    case 'init':
      console.log('初始化了吗',action);
      const {data} = action
      return data
    // case 'add':

    //   return
    // case 'del':

    // return

    default:
      return state;
  }
}

const secondState = (state = arr, action: any) => {
  switch (action.type) {
    case 'first':

      return state;

    default:
      return state;
  }
}

export default combineReducers({
  oneState,
  secondState
})
// actions.ts
const initMethod = (data: any) => ({ type: 'init', data })

const aggreGate = {
  initMethod
}

export {
  aggreGate
}
// testone
interface IndexProps {
  changeState?: any,
  initMethod?: any  // 这里应该是函数的
}
const Index: React.FC<IndexProps> = ({
  changeState ,
  initMethod
}) => {
      useEffect(() => {
          // 初始化redux中的状态数据
      initMethod && initMethod(list)
  }, [])
}

// 注意redux状态变化后的程序执行顺序
// redux 状态改变 首先整个connect高价组件会先执行,然后被他包裹的组价重渲 按顺序逐行解析  父先子后
export default connect(
  (state) => {
    console.log('高阶组件的状态', state)
    return {
      changeState: state
    }
  },
  {
    ...aggreGate
  })(Index)
  // 这个return 的对象的键值会绑定到被修饰组件的props上
  // 第二个参数 的所有方法也会绑定到被修饰组件的props上

未完待续…


文章作者: KarlFranz
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 reprint policy. If reproduced, please indicate source KarlFranz !
评论
  目录