react(笔记)6.1---基于zustand的useStore (reactx进阶)

---认识useStore

下载zustand:

npm i zustand

示例代码:

import { create } from "zustand"

const useStore  = create((set)=>{
  return{
    // 状态数据
    count:0,
    // 修改状态数据的方法
    inc:()=>{
      // 基于老数据进行修改
      set((state)=>({count:state.count+1}))
      // 基于新数据进行修改
      // set({count :100})
    }
  }
})

function App() {
  // 直接解构使用
 const {count , inc} = useStore()
  return (
    <div>
      <div>我是爹</div>
      <button onClick={inc}>{count}</button>
    </div>
  )
}

export default App

---异步请求

示例代码:

import { create } from "zustand"
import {useEffect} from 'react'
const useStore  = create((set)=>{
  return{
    // 状态数据
    messageList:[],
    // 异步方法
    getMessageList: async()=>{
      const res = await fetch('http://geek.itheima.net/v1_0/channels')
      const data =await res.json()
      // console.log(data.data.channels);
      set({messageList: data.data.channels})
    }
  }
})

function App() {
  // 直接解构使用
 const {messageList , getMessageList} = useStore()
 useEffect(()=>{
  getMessageList()
 },[getMessageList])
  return (
    <div>
      <div>我是爹</div>
     <ul>
     {messageList.map(item=> <li key={item.id}>{item.name}</li>)}
     </ul>
    </div>
  )
}

export default App

---切片模式(类似于modules)正规分包写法

--1.包目录结构:

--2.各个包的示例代码:

channelStore.jsx
// channelStore.jsx
const channelStore = ((set) => {
  return {
    // 状态数据
    messageList: [],
    // 异步方法
    getMessageList: async () => {
      const res = await fetch('http://geek.itheima.net/v1_0/channels')
      const data = await res.json()
      // console.log(data.data.channels);
      set({ messageList: data.data.channels })
    }
  }
})
export default channelStore
 counterStore.jsx
// counterStore.jsx
const counterStore = ((set) => {
  return {
    // 状态数据
    count: 0,
    // 修改状态数据的方法
    inc: () => {
      // 基于老数据进行修改
      set((state) => ({ count: state.count + 1 }))
      // 基于新数据进行修改
      // set({count :100})
    }
  }
})

export default counterStore
index.jsx

...a代表的是set以及其他传入参数

import { create } from "zustand"

// 导入子组件
import counterStore from "./modules/counterStore"
import channelStore from "./modules/channelStore"
// 创建useStore组合子模块
const useStore = create((...a) => {
  return {
    ...counterStore(...a),
    ...channelStore(...a)
  }
})
// 导出store
export default useStore
使用的主页面
import { useEffect } from 'react'
import useStore from './store'


function App() {
  // 直接解构使用
  const { count, inc, messageList, getMessageList } = useStore()
  useEffect(() => {
    getMessageList()
  }, [getMessageList])
  return (
    <div>
      <div>我是爹</div>
      <button onClick={inc}>{count}</button>
      <ul>
        {messageList.map(item => <li key={item.id}>{item.name}</li>)}
      </ul>
    </div>
  )
}

export default App

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值