zoukankan      html  css  js  c++  java
  • react

    https://segmentfault.com/a/1190000015684895

    app.js
    	App = () => { return xxx; } // 无状态组件或UI组件
    	mapStateToProps(state){ return {属性名:属性值} } // 告诉UI组件的输入参数有哪些
    	mapDispatchToProps(dispatch){ return {函数名:函数体} } // 告诉UI组件产生的事件如何派发、输出
    	export default connect(mapStateToProps, mapDispatchToProps)(App); // 聪明组件
    其中mapDispatchToProps支持返回函数或对象的形式:
    const mapDispatchToProps = (
      dispatch,
      ownProps // 可选的第2个参数,代表容器组件的props对象
    ) => {
      return {
        onClick: () => {
          dispatch({
            type: 'SET_VISIBILITY_FILTER',
            filter: ownProps.filter
          }); // 这里的action一般调用actioncreater的函数得到,如果用到了redux-thunk中间件的话action还可以是一个函数
        }
      };
    }
    const mapDispatchToProps = {
      onClick: (filter) => {
        type: 'SET_VISIBILITY_FILTER',
        filter: filter
      };
    }
    
    
    actioncreater.js
    	export function addTodo(text) {
    	  return {
    		type: 'ADD_TODO',
    		value: text
    	  }
    	},
    	export function getServerData(url) {
    	  return (dispatch) => { // 还有可选的第2个参数 ownProps,即容器组件的props对象
    		var data = axios.get(url).then(
    			dispatch({具体的action});
    		).error{
    			xxx
    		}
    	  }
    	}

    actionTypes.js
                           export const XXX="XXX";
                           export const YYY="YYY";

    reducer.js
    	export default(state=初始状态, action) => {
    		switch(action.type){
    			case xxx:
    				const newState={...state, {属性名: 新属性值}}
    				return newState;
    			default:
    				return state;
    		}
    	}
    Reducer 是 pure function,不要调用不纯的api,例如 Data.now() Math.random()
    可拆开成多个小的reducer:
    	function someReducer(state = {}, action) {
    	  return {
    		a: reducerA(state.a, action),
    		b: reducerB(state.b, action)
    	  };
    	}
    Redux 提供了一个工具函数 combineReducers 来简化这种 reducer 合并:
    	import { combineReducers } from 'redux';
    	const someReducer = combineReducers({
    	  a: reducerA,
    	  b: reducerB
    	});

    如果State 的属性名必须与子 Reducer 同名可以简写为:
          import { combineReducers } from 'redux';
          const chatReducer = combineReducers({
            reducerA,
            reducerB,
          })

    
    index.js
    import { Provider } from 'react-redux'
    import { createStore } from 'redux'
    import someReducer from './reducers'
    import App from './components/App'
    
    //连接action和reducer:在create时传入reducer,告诉store怎么应对各个action
    let store = createStore(someReducer); // 可以在第2个形参处额外指定一个初始 State
    render(
      <Provider store={store}>
        <App />
      </Provider>,
      document.getElementById('root')
    )
    上面代码中,Provider在根组件外面包了一层,这样一来,App的所有子组件就默认都可以拿到state了。
    

     

  • 相关阅读:
    《30天自制操作系统》17_day_学习笔记
    《30天自制操作系统》18_day_学习笔记
    湖大OJ-实验E----可判定的DFA的空问题
    湖大OJ-实验C----NFA转换为DFA
    《30天自制操作系统》16_day_学习笔记
    《30天自制操作系统》19_day_学习笔记
    《30天自制操作系统》15_day_学习笔记
    《30天自制操作系统》14_day_学习笔记
    [Leetcode Week11]Kth Largest Element in an Array
    [Leetcode Week10]Minimum Time Difference
  • 原文地址:https://www.cnblogs.com/ccdat/p/10816091.html
Copyright © 2011-2022 走看看