• git指令大全



    一、流程
    1、当组件修改数据的时候需要调用store.dispatch传递一个action给store 2、store接受到这个action会将action传递给reducers 3、reducer接受到这个actions后做业务逻辑处理。并返回一个新的newState给store,store这个时候就拥有了state 4、下一次数据再次发生改变的时候就不会使用defaultState 而是用store里面的state 5、需要注意的是 reducers里面必须返回一个纯函数 另外reducers里面的state只允许读不允许修改 6、组件如何监听数据的改变 store.subscribe();监听 安装: 二、步骤 yarn add redux --save-dev 1.创建store,对比flux,不需要合并空对象 import {createStore, combineReducers} from "redux"; import numReducers from "../store/combineReducers/numReducers" import todoReducers from "../store/combineReducers/todoReducers" const reducers = combineReducers({ numReducers, todoReducers }) const store = createStore(reducers); export default store; 2.再在store中创建一个reducers.js reducers必须有一个默认的state reducers必须返回一个纯函数 reducers里面的state只允许读,不允许修改,如果修改的话页面是不会发生改变的 import reducers from "./reducers" const defaultState = { inputVal:"", todoList:[] } export default (state = defaultState,action)=>{ switch(action.type){ case "INPUT_CHANGE": //深拷贝 const changeState = JSON.parse(JSON.stringify(state)) changeState.inputVal = action.value return changeState; case "ADD_ITEM": const addItemState = JSON.parse(JSON.stringify(state)) addItemState.todoList.push(addItemState.inputVal) addItemState.inputVal = "" return addItemState; case "DEL_ITEM": const delItemState = JSON.parse(JSON.stringify(state)) delItemState.todoList.splice(action.value,1) return delItemState } return state } 3.页面 import React,{Component} from "react"; import store from "../store" export default class Home extends Component{ constructor(props){ super(props) this.state = store.getState(); //监听 store.subscribe(this.handleUpdate.bind(this)) } render(){ let {inputVal,todoList} = this.state return ( <div> <input type = "text" value = {inputVal} onChange = {this.handleChange.bind(this)}/> <button onClick = {this.handleAdd.bind(this)}>添加</button> <ul> { todoList.map((item,index)=>{ return <li key={index}>{item} <button onClick = {this.handleDel.bind(this,index)}>删除</button> </li> }) } </ul> </div> ) } handleChange(e){ let val = e.target.value const action = { type:"INPUT_CHANGE", value:val } store.dispatch(action) } handleAdd(){ const action ={ type:"ADD_ITEM" } store.dispatch(action) } handleDel(params){ const action = { type:"DEL_ITEM", value:params } store.dispatch(action) } handleUpdate(){ this.setState(store.getState()) } } 三、通过combineReducers合并多个reducers 1.创建combineReducers 2.在store>index.js合并 import {createStore, combineReducers} from "redux"; import numReducers from "../store/combineReducers/numReducers" import todoReducers from "../store/combineReducers/todoReducers" const reducers = combineReducers({ numReducers, todoReducers }) const store = createStore(reducers); export default store; 3.state后加入reducers名 render(){ //state后加入reducers名 let {inputVal,todoList} = this.state.todoReducers return ( <div> <input type = "text" value = {inputVal} onChange = {this.handleChange.bind(this)}/> <button onClick = {this.handleAdd.bind(this)}>添加</button>
  • 相关阅读:
    Java DB 访问(三)mybatis mapper interface接口
    android stdio 安装后gradle 编译失败,设置代理不管用
    超星自动签到并邮件通知
    关于解决Mac使用docker安装SQL server for Linux 中文乱码问题
    Bom简单介绍
    grid-layout
    Position
    前端学习(注册表)
    关于学精通一门语言的个人看法(欢迎留言补充)
    Google 最新推出数据集搜索
  • 原文地址:https://www.cnblogs.com/FAB1E/p/10073136.html
Copyright © 2020-2023  润新知