react全局状态的一点理解


新建一个store文件夹,新建 state.js/reducer.js/store.js/action.js文件
state.js用来存放全局状态值,store.js用来创建全局状态对象并和执行相关操作的reducer.js相关联,在 store.js中引入createStore创建对象的方法:import {createStore} from 'react',然后引入reducer.js文件,接着创建全局对象
 
actions.js文件中存放修改全局状态值的数据,需要引入store.js文件中的全局状态对象,然后引用其中的dispatch方法将修改的内容传递给reducer修改,
其中,type需要按照规定书写,其中的内容可以更改,其他的内容亦可更改
reducer.js文件中执行由actions中传递过来的方法,并按照type的值来执行对应的方法
import state from './state'
export default(prevState=state,actions)=>{
    let newDate = prevState
    let {type,payload} = actions
    switch (type) {
        case 'ADD':
            newDate.list.unshift({msg:payload,status:false})
            break;
    
        default:
            break;
    }
    return newDate
}
需要将type和payload等数据解构出来,由于是个函数所以需要将修改后的数据返回,
在其他需要使用全局状态值的组件页面中,可以通过引入store对象,然后通过 store.getState()来获取由reducer.js处理过后的数据,(如果reducer.js函数中没有return修改后的数据,那么store.getState() 将获取不到数据)
最后在引用全局状态值的组件中,通过componentDidMount()生命周期使用重新渲染的方法来使页面更新,必要时考虑性能优化,即,如果数据一样则不渲染
componentDidMount(){
        Store.subscribe(()=>{
            this.setState({})
        })
    }
this.setState({})中放空对象的原因是使其触发状态值更新


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM