搜索

首页  >  问答  >  正文

javascript - 初学Redux的一些疑问

看了许多资料对Redux还是不是很理解
1.对于全局的State,也就是Store所管理的,初始是在哪里生成的? 之后又是怎么添加进去的?添加之后是不是都在同一个{}中得保证所有属性不重名

2.在Redux模式下,是不是每一个组件(需要state的组件)需要用
connect( mapStateToProps ,mapDispatchToProps )(Component);进行绑定?

3.一个Action是不是所有Reducer都会收到?

然后就是自己在懵逼状态下写的一点代码跑不起来 也没有错误提示:

import React from "react";
import ReactDOM from "react-dom";
import {createStore,bindActionCreators,combineReducers} from "redux";

import {Provider,connect} from "react-redux";

class Counter extends React.Component {
    render() {
        let { value1, onIncreaseClick, onDecreaseClick, value2, onDoubleClick, onResetClick } = this.props;
        return (
            <p>
                <p>
                    <p>{value1}</p>
                    <button onClick={onIncreaseClick}>Increase</button>
                    <button onClick={onDecreaseClick}>Decrease</button>
                </p>
                <p>
                    <p>{value2}</p>
                    <button onClick={onDoubleClick}>Double</button>
                    <button onClick={onResetClick}>Reset</button>
                </p>
            </p>
        )
    }
}
function mapStateToProps(state) {
    return { //obj
        value1:state.count,
        value2:state.count
    }
}
function mapDispatchToProps(dispatch) {
    return { //obj
        onIncreaseClick(){
            dispatch({type:"increase"});
        },
        onDecreaseClick(){
            dispatch({type:"decrease"});
        },
        onDoubleClick(){
            dispatch({type:"double"});
        },
        onResetClick(){
            dispatch({type:"reset"});
        }
    }
}

function counter1(state = { count: 0 }, action) {
    let count = state.count;
    switch (action.type) {
        case 'increase':
            return { count: count + 1 };
        case 'decrease':
            return { count: count-1 };
        default:
            return state;
    }
}
function counter2(state = { count: 0 }, action) {
    let count = state.count;
    switch (action.type) {
        case 'double':
            return { count: count*2 };
        case 'reset':
            return { count: 0 };
        default:
            return state;
    }
}
let rootReducer = combineReducers({
    counter1,
    counter2
});
let store = createStore(rootReducer);
let CounterCompo = connect(
    mapStateToProps,
    mapDispatchToProps
)(Counter);
ReactDOM.render(<Provider store={store}>
    <CounterCompo/>
</Provider>,document.getElementById('container'));
大家讲道理大家讲道理2764 天前728

全部回复(5)我来回复

  • 迷茫

    迷茫2017-05-19 10:35:34

    找到问题了。。。。combineReducers的坑 用了之后State被划分到各自的Reducer去了

    回复
    0
  • 阿神

    阿神2017-05-19 10:35:34

    其实redux很简单,一个action代表发生改变的动作,对应的reducer代表对应action的效果。
    使用redux就是一句话:哪个组件发生数据改变就在对应组件中dispatch(action),哪个组件需要使用store中的数据就传入需要的mapStateToProps参数到connect,两个相互独立。

    回复
    0
  • 天蓬老师

    天蓬老师2017-05-19 10:35:34

    1、其实准确来说Reducer就是定义store的地方。可以把每个Reducer分开来,然后最后用combineReducers组合在一起。
    2、推荐只是高层级的组件进行绑定,后然低层级的通过高层级进行交互。
    3、都可以收到。

    建议从官方的Demo进行起步。

    回复
    0
  • PHPz

    PHPz2017-05-19 10:35:34

    http://huziketang.com/books/r...

    回复
    0
  • 阿神

    阿神2017-05-19 10:35:34

    看了许多资料对Redux还是不是很理解1.对于全局的State,也就是Store所管理的,初始是在哪里生成的? 之后又是怎么添加进去的?添加之后是不是都在同一个{}中得保证所有属性不重名
    答:初始数据在createStore的第二个参数就可以配置,reducer会返回一个新的state到store,没有明白你的属性重名是什么意思

    2.在Redux模式下,是不是每一个组件(需要state的组件)需要用
    connect( mapStateToProps ,mapDispatchToProps )(Component);进行绑定?
    不一定的

    3.一个Action是不是所有Reducer都会收到?
    每一个action都会触发对应的reducer

    回复
    0
  • 取消回复