react-redux-action

Action 是把数据从应用(view等)传到 store 的有效载荷,store.dispatch() 将 action 传到 store。

//尽量减少在 action 中传递的数据
//action创建函数创建action

const
addTodo=(text)=>{ return { type:"ADD_TODO", id:todoId++, text } }

单独的模块存放action

import { ADD_TODO, REMOVE_TODO } from '../actionTypes'

Redux 中只需把 action 创建函数的结果传给 dispatch() 方法即可发起一次 dispatch 过程。

dispatch(addTodo(text))
//或者创建一个 被绑定的 action 创建函数 来自动 dispatch:

const boundAddTodo = text => dispatch(addTodo(text))
boundAddTodo(text);
//惟一使用 bindActionCreators(actionCreators, dispatch) 的场景是:
把 action creator 往下传到一个组件上,却不想让这个组件觉察到 Redux 的存在,而且不希望把 Redux store 或 dispatch 传给它。

//把 action creators 转成拥有同名 keys 的对象,再使用dispatch把每个 action creator 包起来可以直接调用。

//TodoActionCreators.js:

export function addTodo(text) {
  return {
    type: 'ADD_TODO',
    text
  };
}

export function removeTodo(id) {
  return {
    type: 'REMOVE_TODO',
    id
  };
}

//SomeComponent.js

import { Component } from 'react';
import { bindActionCreators } from 'redux';
import { connect } from 'react-redux';

import * as TodoActionCreators from './TodoActionCreators';

class TodoListContainer extends Component {
  componentDidMount() {
    // 由 react-redux 注入:
    let { dispatch } = this.props;
    let action = TodoActionCreators.addTodo('Use Redux');
    dispatch(action);
  }

  render() {
    let { todos, dispatch } = this.props;

    // 这是应用 bindActionCreators 比较好的场景:
    // 在子组件里,可以完全不知道 Redux 的存在。

    let boundActionCreators = bindActionCreators(TodoActionCreators, dispatch);

    return (
      <TodoList todos={todos} {...boundActionCreators} />
    );

    // 或者
    //return <TodoList todos={todos} dispatch={dispatch} />;
  }
}

export default connect(
  state => ({ todos: state.todos })
)(TodoListContainer)
原文地址:https://www.cnblogs.com/avidya/p/8488798.html