VanillaJS其实是原生JS
Redux官方示例:
https://www.redux.org.cn/docs/introduction/Examples.html
重写示例

Redux版

http://js.jirengu.com/gikoxocesa/2/edit?html,output

React + Redux版

安装redux

  1. yarn add redux
  2. # 或者
  3. npm install --save-dev redux

npm和yarn不要混用,优先用yarn
代码连接

优点:Ract不会每次都整体更新,通过DOM diff更新有变化的地方
缺点:store要一层一层往下传

React-Redux版

官方文档:https://react-redux.js.org/introduction/quick-start
安装React-Redux

  1. yarn add react-redux

用Provider包裹App

  1. import {Provider} from 'react-redux'
  2. function changeState(state, action){
  3. if(state === undefined){
  4. return {n: 0}
  5. }else{
  6. if(action.type === 'add'){
  7. return {n: state.n + action.payload}
  8. } else {
  9. return state
  10. }
  11. }
  12. }
  13. const store = createStore(changeState)
  14. ReactDOM.render(
  15. <Provider store={store}>
  16. <App />
  17. </Provider>,
  18. document.getElementById('root')
  19. );

在App组件中引入connect

  1. import {connect} from 'react-redux'
  2. function App(props) {
  3. return (
  4. <div className="App">
  5. 点击了<span id="value">{props.n}</span>次
  6. <div>
  7. <button id="add" onClick={()=>{props.add1()}}>+1</button>
  8. <button id="add2" onClick={()=>{props.add2()}}>+2</button>
  9. <button id="addIfOdd" onClick={()=>{props.add3()}}>如果是单数就+1</button>
  10. <button id="addAfter2Sec" onClick={()=>{props.add4()}}>2s后+1</button>
  11. </div>
  12. </div>
  13. );
  14. }
  15. function mapStateToProps(state){
  16. return {
  17. n: state.n
  18. }
  19. }
  20. function mapDispatchToProps(dispatch) {
  21. return {
  22. add1: () => {dispatch({type:'add', payload: 1})}
  23. }
  24. }
  25. export default connect(mapStateToProps,actionCreator)(App);