Redux基础

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Redux基础相关的知识,希望对你有一定的参考价值。

Redux 是 javascript 状态容器,提供可预测化的状态管理。

安装: npm install --save redux

安装React绑定库和开发者工具:npm install --save react-redux;npm install --save-dev redux-devtools


Redux 三大原则
单一数据源:整个应用的state被储存在一棵 object tree 中,并且这个 object tree 只存在于唯一一个store 中。
State只读:惟一改变 state 的方法就是触发 action,action 是一个用于描述已发生事件的普通对象。
使用纯函数来执行修改:通过编写reducers实现,reducer只是一些纯函数,接收state和action,返回新的state。

Action
Action 是把数据从应用(译者注:这里之所以不叫 view 是因为这些数据有可能是服务器响应,用户输入或其它非 view 的数据 )传到 store 的有效载荷。它是 store 数据的唯一来源。一般来说你会通过 store.dispatch() 将 action 传到 store。
1 export const ADD_ITEM = ADD_ITEM;
2 export function addItem(text) {
3     return {type: ADD_ITEM, text}
4 }

 Reducer

在 Redux 应用中,所有的 state 都被保存在一个单一对象中,Reducer就是用来更新state

import {combineReducers} from ‘redux‘
import {ADD_ITEM, DELETE_ITEM, CHANGE_VALUE,GET_VALUE} from ‘./actions‘

function todos(state = [], action) {
    switch (action.type) {
        case ADD_ITEM:
            return [
                ...state, {
                    text: action.text,
                    completed: false
                }
            ]

        case DELETE_ITEM:
            state.slice(action.index);
            return state;
        default:
            return state
    }
}

 Store

Store 就是把它们联系到一起的对象。Store 有以下职责:

再次强调一下 Redux 应用只有一个单一的 store。当需要拆分数据处理逻辑时,你应该使用 reducer 组合 而不是创建多个 store。

const operationApp = combineReducers({todos, value})
export default operationApp;

 

使用

index.js中

let store = createStore(todoApp)
let rootElement = document.getElementById(‘root‘)
render(
  <Provider store={store}>
    <ToDo />
  </Provider>,
  rootElement
)

 Todo.Js中

  const { dispatch,todos,value,store} = this.props;
        return (
            <div>
                <MuiThemeProvider>
                    <Paper style={style} zDepth={3}>
                        <div className="todo-wrap">
                            <div style={divstyle}>
                                <TodoHeader
                                    className="todoHeader"
                                    addTodo={text=>dispatch(addItem(text))}
                                    curValue={value}
                                    valueChange={text=>dispatch(valueChange(text))}/>
                            </div>   
                        </div>
                    </Paper>
                </MuiThemeProvider>
            </div>
        );
    }

function select(state) {
  return {
      todos: state.todos,
      value: state.value
  }
}

export default connect(select)(ToDoApp);

 

以上例子是结合react的简单实现。http://www.redux.org.cn/docs/react-redux/quick-start.html

待续

 




以上是关于Redux基础的主要内容,如果未能解决你的问题,请参考以下文章

redux基础

Redux-Form 基础使用

Redux百行代码千行文档

electron+react-redux-saga基础项目配置

[vscode]--HTML代码片段(基础版,reactvuejquery)

mobx的基础使用