试图通过redux-react教程,我想知道rootReducer
来自
import { createStore } from "redux";
import rootReducer from "./reducers";
export default createStore(rootReducer);
combineReducers
是否自动导出rootReducer
?
https://codesandbox.io/s/9on71rvnyo?file=/src/redux/store.js
中的第二个问题
/components/AddTodo.js
handleAddTodo = () => {
this.props.addTodo(this.state.input);
this.setState({ input: "" });
};
handleAddTodo
调用addTodo
动作
/redux/actions.js
export const addTodo = content => ({
type: ADD_TODO,
payload: {
id: ++nextTodoId,
content
}
});
它只返回一个对象
但是是什么将addTodo
连接到/reducers/todos.js
中的减速器本身?
export default function(state = initialState, action) {
switch (action.type) {
case ADD_TODO: {
.....
combineReducers是否自动导出rootReducer?
是的,它有
export default combineReducers({ todos, visibilityFilter });
够了吗
reducers/todos.js中addTodo与reducers本身的连接是什么?
调度函数,当您调用此函数时:
this.props.addTodo(this.state.input);
在引擎盖下,你实际上在运行这样的东西:
dispatch(addTodo(this.state.input))
这是combineReducers
:的伪代码
function combineReducers({ reducer1, reducer2 }) {
return (state, action) => {
if (action.type === 'reducer1') return reducer1(state.reducer1, action);
if (action.type === 'reducer2') return reducer2(state.reducer2, action);
}
}
这并不完全正确,尤其是回归部分,但希望它能给你一个想法。
基本上,它所做的是创建一个大的减速器,就好像两个减速器组合成一个一样。正如您可能已经知道的,reducer是一个函数,它接受上一个状态和操作,并返回下一个状态。
第二个问题:connect
起了作用。一旦您将addTodo
道具连接到存储,已经连接到reducer的存储将使用(prevState, action)
值调用reducer(再次调用ONE BIG函数(。action
将是addTodo
动作生成器方法的返回值。
reducer执行其余操作,即检查匹配的操作类型(在本例中为ADD_TODO
(是否存在,并执行它所做的操作。