{ type: 'ADD_STUDENT',data:{name: 'tom',age:18} }
import {createStore} from 'redux'
import reducer from './reducers'
const store = createStore(reducer)
getState()
:得到statedispatch(action)
:分发action, 触发reducer调用, 产生新的statesubscribe(listener)
:注册监听, 当产生了新的state时, 自动调用getState()
dispatch(action)
subscribe(listener)
store.getState()
store.dispatch({type:'INCREMENT', number})
store.subscribe(render)
import React, { Component } from 'react'export default class Count extends Component {state = {sum: 0,num: 1}add = () => {const { sum, num } = this.statethis.setState({ sum: sum + num })}sub = () => {const { sum, num } = this.statethis.setState({ sum: sum - num })}oddAdd = () => {const { sum, num } = this.stateif (sum % 2 === 1) {this.setState({ sum: sum + num })}}asyncAdd = () => {const { sum, num } = this.statesetTimeout(() => {this.setState({ sum: sum + num })}, 2000)}render() {const { sum } = this.statereturn (当前求和为:{sum}
)}
}
redux安装指令:
yarn add redux
或npm i redux
{type:'@@REDUX/INIT_a.2.b.4}
/*** 1、该文件是为了创建一个为Count组件服务的reducer* reducer本质就是一个函数* 2、reducer会接到两个参数* - preState:之前的状态* - action:动作对象*/
export default function countReducer(preState = 0, action) {// 从action中获取type/dataconst { type, data } = action// 根据type判断如何加dataswitch (type) {case 'increment': // +return preState + datacase 'decrement': // -return preState - datadefault:return preState}
}
/* 该文件专门用于暴露一个store对象,整个应用只有一个store对象
*///引入createStore,专门用于创建redux中最为核心的store对象
import { createStore } from 'redux'
//引入为Count组件服务的reducer
import countReducer from './count_reducer'
//暴露store
export default createStore(countReducer)
import React, { Component } from 'react'
// 引入store,用于获取redux中维护的状态
import store from '../../redux/store'export default class Count extends Component {state = {num: 1}componentDidMount() {// 监测redux的状态,变化触发renderstore.subscribe(() => {// redux状态改变就会调这个回调this.setState({})})// 注:这个监测可挂在入口文件上,这样就不用每个组件都写一遍了}add = () => {const { num } = this.statestore.dispatch({type: 'increment',data: num})}sub = () => {const { num } = this.statestore.dispatch({type: 'decrement',data: num})}oddAdd = () => {const { num } = this.stateif (store.getState() % 2 === 1) {store.dispatch({type: 'increment',data: num})}}asyncAdd = () => {const { num } = this.statesetTimeout(() => {store.dispatch({type: 'increment',data: num})}, 2000)}render() {return (当前求和为:{store.getState()}
)}
}