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>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值