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/

  • 相关阅读:
    个人冲刺二(7)
    个人冲刺二(6)
    个人冲刺二(5)
    个人冲刺二(4)
    对称二叉树 · symmetric binary tree
    108 Convert Sorted Array to Binary Search Tree数组变成高度平衡的二叉树
    530.Minimum Absolute Difference in BST 二叉搜索树中的最小差的绝对值
    pp 集成工程师 mism师兄问一问
    17. Merge Two Binary Trees 融合二叉树
    270. Closest Binary Search Tree Value 二叉搜索树中,距离目标值最近的节点
  • 原文地址:https://www.cnblogs.com/Searchor/p/13877937.html
Copyright © 2011-2022 走看看