Skip to content

redux例子

司徒正美 edited this page Aug 29, 2017 · 1 revision
<!DOCTYPE html>
<html>

<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width">
    <script type='text/javascript' src="./dist/React.js"></script>
    <script src="https://cdn.bootcss.com/redux/3.7.2/redux.js"></script>
    <script src="https://cdn.bootcss.com/redux-thunk/2.2.0/redux-thunk.js"></script>
    <script src="./lib/babel.js"></script>
    <script type='text/babel'>

window.onload = function(){
    class Counter extends React.Component {
    constructor(props) {
        super(props);
        this.incrementAsync = this.incrementAsync.bind(this);
        this.incrementIfOdd = this.incrementIfOdd.bind(this);
    }

    incrementIfOdd() {
        if (this.props.value % 2 !== 0) {
            this.props.onIncrement()
        }
    }

    incrementAsync() {
        setTimeout(this.props.onIncrement, 1000)
    }

    render() {
        const { value, onIncrement, onDecrement } = this.props
        return (
            <div>
                <p>当前点击次数: {value} </p>
                <input value="增加" type="button" onClick={onIncrement} />

                <input value="减少" type="button" onClick={onDecrement} />
                <input value="只有奇数才能加" type="button" onClick={this.incrementIfOdd} />

                <input value="异步增加" type="button" onClick={this.incrementAsync} />

            </div>
        )
    }
}

function counter(state = 0, action) {
    switch (action.type) {
        case 'INCREMENT':
            return state + 1
        case 'DECREMENT':
            return state - 1
        default:
            return state
    }
}
const store = Redux.createStore(counter)
const div = document.getElementById('example')
const render = () => ReactDOM.render(
    <Counter
        value={store.getState()}
        onIncrement={() => store.dispatch({ type: 'INCREMENT' })}
        onDecrement={() => store.dispatch({ type: 'DECREMENT' })}
    />,
    div
)

render()
store.subscribe(render)
}
    </script>
</head>

<body>

    <div>这个默认会被清掉</div>
    <div id='example'></div>


</body>

</html>