image.pngimage.png

1.安装依赖

  1. npm install --save redux
  2. yarn add redux
  1. store 保存数据的地方,将store看成一个容器,一个应用只能有一个store
  2. //新建两个文件src/index.js reducer.js

2.src/store/index.js

  1. //创建store
  2. import {createStore} from 'redux'
  3. const defaultState={
  4. msg:"这是关于redux"
  5. }
  6. const reducer=(state=defaultState,actions)=>{
  7. return state;
  8. }
  9. //createStore()里面只能接收函数
  10. let store=createStore(reducer)
  11. export default store;
  1. //跨页面传参
  2. import store from '../store/index'
  3. componentDidMount(){
  4. console.log(store.getState()) //{msg: "这是关于redux"}
  5. }

3.分离

  1. //store/index.js
  2. import {createStore} from 'redux'
  3. import reducer from './reducer'
  4. //createStore()里面只能接受函数
  5. let store=createStore(reducer)
  6. export default store;
  1. //store/reducer.js
  2. const defaultState={
  3. msg:"这是关于redux"
  4. }
  5. const reducer=(state=defaultState,action)=>{
  6. return state;
  7. }
  8. export default reducer;

4.向reudcer派发事件

home.js

  1. this.state=store.getState()
  2. <button onClick={this.handleClick}>改变reducex</button>
  3. handleClick=()=>{
  4. const action={
  5. type:"btn_value",
  6. value:"redux很难用"
  7. }
  8. store.dispatch(action) //使用dispatch向reducer派发行为
  9. }

reducer.js 接收

  1. const defaultState={
  2. msg:"这是关于redux"
  3. }
  4. //reducer可以接收state,但是不能修改state
  5. const reducer=(state=defaultState,action)=>{
  6. console.log(action)
  7. if(action.type==="btn_value"){
  8. let newState={...state}; //使用拷贝,改变state的值
  9. newState.msg=action.value;
  10. return newState;
  11. }
  12. }
  13. export default reducer;

改变数据

  1. store.subscribe(this.handleSotreChange)
  2. handleSotreChange=()=>{
  3. this.setState(store.getState())
  4. }

redux调试工具

  1. 谷歌应用商店安装redux插件,点击插件中Redux DevTools进入github找到代码,复制到store
  1. let store=createStore(reducer,window.__REDUX_DEVTOOLS_EXTENSION__ &&
  2. window.__REDUX_DEVTOOLS_EXTENSION__())