react仓库

定义一个仓库并且使用:

		const createStore = (state, changeState)=>{
    
    
			return {
    
       // 返回的对象就可以称为一个仓库
			
            }
        }
                 // 使用之
         let store = createStore(); // 创建一个仓库

获取并且初始化状态:

		const createStore = (state, changeState)=>{
    
    
			const getState = () => state
			return {
    
       // 返回的对象就可以称为一个仓库
                dispatch,  // 派发一个动作
                getState,   // 获取状态
                subscribe  // 订阅			
            }
        }
                // 初始化状态  老的状态
        let countState = {
    
     count:0 }
                 // 使用之
         let store = createStore(countState ); // 创建一个仓库

更新状态:

		const createStore = (state, changeState)=>{
    
    
			const getState = () => state
			return {
    
       // 返回的对象就可以称为一个仓库
                dispatch,  // 派发一个动作
                getState,   // 获取状态
                subscribe  // 订阅			
            }
        }
                // 初始化状态  老的状态
        let countState = {
    
     count:0 }
         // 更新状态  所谓改变状态,并不想修改老状态,目标是返回一个新状态
        function changeState(state, action){
    
    

        }
                 // 使用之
         let store = createStore(countState ,changeState); // 创建一个仓库

订阅render:

		const createStore = (state, changeState)=>{
    
    
			const getState = () => state
            // 订阅
            let listeners = [];
            const subscribe = (listener) => listeners.push(listener)
			return {
    
       // 返回的对象就可以称为一个仓库
                dispatch,  // 派发一个动作
                getState,   // 获取状态
                subscribe  // 订阅			
            }
        }
                // 初始化状态  老的状态
        let countState = {
    
     count:0 }
         // 更新状态  所谓改变状态,并不想修改老状态,目标是返回一个新状态
        function changeState(state, action){
    
    
        
        }
                // 初始渲染和更新渲染
        function render(){
    
    
            document.getElementById("count").innerHTML = store.getState().count
        }
                 // 使用之
         let store = createStore(countState ,changeState); // 创建一个仓库
		        // 先订阅
        store.subscribe(render)

派发一个动作:

		const createStore = (state, changeState)=>{
    
    
			const getState = () => state
            // 订阅
            let listeners = [];
            const subscribe = (listener) => listeners.push(listener)
            // 发布
            const dispatch = (action) =>{
    
    
                state = changeState(state, action)
                listeners.forEach(listener=>listener())
            }
			return {
    
       // 返回的对象就可以称为一个仓库
                dispatch,  // 派发一个动作
                getState,   // 获取状态
                subscribe  // 订阅			
            }
        }
                // 初始化状态  老的状态
        let countState = {
    
     count:0 }
         // 更新状态  所谓改变状态,并不想修改老状态,目标是返回一个新状态
        function changeState(state, action){
    
    
            switch(action.type){
    
    
                case "INCREMENT":
                    // state.count += action.num  // 修改的还是老状态
                    return{
    
    
                        count:state.count + action.num
                    }
                case "DECREMENT":
                    // state.count -= action.num
                    return{
    
    
                        count:state.count - action.num
                    }
                default:state;  // 返回老状态
            }
        }
                // 初始渲染和更新渲染
        function render(){
    
    
            document.getElementById("count").innerHTML = store.getState().count
        }
                 // 使用之
         let store = createStore(countState ,changeState); // 创建一个仓库
		        // 先订阅
        store.subscribe(render)

完整版:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <!-- 当点击加1时,需要派发一个动作,使用一个对象来描述这个动作 -->
    <!-- 这个对应中有一个属性叫type  {
    
    type:"INCREMENT",num:1} -->
    <!-- 封装一个方法用来派发这个动作 动作叫action -->
    <button onclick='store.dispatch({type:"INCREMENT",num:1})'>1</button>
    <h1 id="count"></h1>
    <button onclick='store.dispatch({type:"DECREMENT",num:1})'>1</button>
    <script>
        // createStore需要传入一个初始化状态state
        // 第2个参数是方法,用来改变状态   Store是仓库的意思
        const createStore = (state, changeState)=>{
    
    
            const getState = () => state

            // 订阅
            let listeners = [];
            const subscribe = (listener) => listeners.push(listener)

            // 发布
            const dispatch = (action) =>{
    
    
                state = changeState(state, action)
                listeners.forEach(listener=>listener())
            }

            return {
    
       // 返回的对象就可以称为一个仓库
                dispatch,  // 派发一个动作
                getState,   // 获取状态
                subscribe  // 订阅
            }
        }
        
        // 初始化状态  老的状态
        let countState = {
    
     count:0 }
        // 更新状态  所谓改变状态,并不想修改老状态,目标是返回一个新状态
        function changeState(state, action){
    
    
            switch(action.type){
    
    
                case "INCREMENT":
                    // state.count += action.num  // 修改的还是老状态
                    return{
    
    
                        count:state.count + action.num
                    }
                case "DECREMENT":
                    // state.count -= action.num
                    return{
    
    
                        count:state.count - action.num
                    }
                default:state;  // 返回老状态
            }
        }
         // 使用之
         let store = createStore(countState,changeState); // 创建一个仓库
         
        // 初始渲染和更新渲染
        function render(){
    
    
            document.getElementById("count").innerHTML = store.getState().count
        }
        // 刚上来,就需要把初始化状态渲染到页面
        render();

       
        // 先订阅
        store.subscribe(render)

    </script>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/QZ9420/article/details/112292454
今日推荐