zoukankan      html  css  js  c++  java
  • react的useEffect 第二个参数

    useEffect第二个参数可以是普通类型、也可以是引用类型。

    如果是从props接收来的值,是引用类型的,且是immutable类型的,不要在mapStateToProps里使用toJS,如下:

    const mapStateToProps = (state) => {
      return {
        count: state.getIn(['light', 'count']),
        router: state.getIn(['light', 'router']).toJS(),
      }
    }
    

    要在组件里使用:

    import React, { useEffect } from 'react'
    import { connect } from 'react-redux'
    import { withRouter } from 'react-router-dom'
    
    function Test(props) {
      const { count, router } = props
      
      const handleAdd = () => {
        props.onSetState(['count'], count + 1)
      }
    
      const handleRouter = () => {
        const myRouter = router.toJS()
        myRouter.push({
          id: Date.now()
        })
        props.onSetState(['router'], myRouter)
      }
    
      useEffect(() => {
        console.log('count发生变化', count)
      }, [count])
    
      useEffect(() => {
        console.log('router发生变化', router.toJS())
      }, [router])
      return (
        <div>
          <div>{count}</div>
          <button onClick={() => handleAdd()}>加</button>
          <button onClick={() => handleRouter()}>改变router</button>
        </div>
      )
    }
    
    const mapStateToProps = (state) => {
      return {
        count: state.getIn(['light', 'count']),
        router: state.getIn(['light', 'router']),
      }
    }
    
    const mapDispatchToProps = (dispatch) => {
      return {
        onSetState(key, value) {
          dispatch({ type: 'SET_LIGHT_STATE', key, value })
        },
        onDispatch(action) {
          dispatch(action)
        },
      }
    }
    
    export default connect(mapStateToProps, mapDispatchToProps)(withRouter(Test))
    

     light.js:

    import { fromJS } from 'immutable'
    
    const defaultState = fromJS({
      count: 1,
      router: []
    })
    
    const reducer = (state = defaultState, action) => {
      switch (action.type) {
        case 'SET_LIGHT_STATE':
          return state.setIn(action.key, fromJS(action.value))
        default:
          return state
      }
    }
    
    export default reducer

  • 相关阅读:
    js 类型检测
    js笔记
    js 笔记 -- 随机生成颜色值
    js笔记 -- toString() 和String()
    jquery 实现的josnp
    json 、jsonp
    关于js 中的 this
    [LeetCode][JavaScript]Symmetric Tree
    [LeetCode][JavaScript]Balanced Binary Tree
    [LeetCode][JavaScript]Wiggle Sort II
  • 原文地址:https://www.cnblogs.com/xutongbao/p/14876263.html
Copyright © 2011-2022 走看看