zoukankan      html  css  js  c++  java
  • xml ui

    useReducer may be used as an alternative to useState.

    const [state, dispatch] = useReducer(reducer, initialState, lazyInitFunction)
    

    Ideal for complex state logic where there's a dependency on previous state values or a lotta state sub values

    const initialState = {  15 }
    const reducer = (state, action) => {
      switch (action) {
        case 'plus':
          return {  state.width + 15 }
        case 'minus':
          return {  Math.max(state.width - 15, 2) }
        default:
          throw new Error("what's going on?" )
      }
    }
    
    const Bar = () => {
      const [state, dispatch] = useReducer(reducer, initialState)
      return <>
        <div style={{ background: 'teal', height: '30px',  state.width }}></div>
        <div style={{marginTop: '3rem'}}>
            <button onClick={() => dispatch('plus')}>Increase bar size</button>
            <button onClick={() => dispatch('minus')}>Decrease bar size</button>
        </div>
        </>
    }
    render(Bar)
    

    以lazy函数返回设置初始状态

    const initializeState = () => ({
       100
    })
    // ✅ note how the value returned from the fn above overrides initialState below: 
    const initialState = {  15 }
    const reducer = (state, action) => {
      switch (action) {
        case 'plus':
          return {  state.width + 15 }
        case 'minus':
          return {  Math.max(state.width - 15, 2) }
        default:
          throw new Error("what's going on?" )
      }
    }
    
    const Bar = () => {
      const [state, dispatch] = useReducer(reducer, initialState, initializeState)
      return <>
        <div style={{ background: 'teal', height: '30px',  state.width }}></div>
        <div style={{marginTop: '3rem'}}>
            <button onClick={() => dispatch('plus')}>Increase bar size</button>
            <button onClick={() => dispatch('minus')}>Decrease bar size</button>
        </div>
        </>
    }
    render(Bar)
    

    模拟this.setState的merge行为

    const initialState = {  15 }
    const reducer = (state, newState) => ({
      ...state,
       newState.width
    })
    
    const Bar = () => {
      const [state, setState] = useReducer(reducer, initialState)
      return <>
        <div style={{ background: 'teal', height: '30px',  state.width }}></div>
        <div style={{marginTop: '3rem'}}>
            <button onClick={() => setState({ 100})}>Increase bar size</button>
            <button onClick={() => setState({ 3})}>Decrease bar size</button>
        </div>
        </>
    }
    render(Bar)
    

    https://react-hooks-cheatsheet.com/

  • 相关阅读:
    spring boot 若依系统整合Ueditor,部署时候上传图片错误解决
    JVM学习笔记之栈区
    据说这个是可以撸到2089年的idea2020.2
    小程序监听屏幕滑动事件
    小程序bindinput和bindblur赋值延迟问题解决
    小程序文件下载并保存文件名打开
    数据结构
    Spring JPA 自定义删改
    Spring JPA 查询创建
    Spring JPA 拓展
  • 原文地址:https://www.cnblogs.com/Searchor/p/13877937.html
Copyright © 2011-2022 走看看