zoukankan      html  css  js  c++  java
  • 使用useMemo优化性能

    使用useMemo优化性能:

    import React, { Suspense, useMemo } from 'react'
    import { Switch, Route } from 'react-router-dom'
    import { connect } from 'react-redux'
    import Loading from '../../../components/light/Loading'
    import Header from './Header'
    import Nav from './Nav'
    
    function List(props) {
      const { router } = props
     
    
      // 只有router变化时才会重新渲染listDom,useMemo函数可以起到性能优化的作用
      const listDom = useMemo(() => {
        const listDom = []
        const listRender = (arr) => {
          arr.forEach((item) => {
            if (item.children) {
              listRender(item.children)
            } else {
              listDom.push(
                <Route
                  key={item.path}
                  path={item.path}
                  component={item.component}
                ></Route>
              )
            }
          })
        }
        listRender(router.toJS())
        return listDom
      }, [router])
    
      return (
        <div className="m-list">
          <Header></Header>
          <div className="m-list-info">
            <Nav></Nav>
            <Suspense fallback={<Loading isLazyLoading={true}></Loading>}>
              <Switch>{listDom}</Switch>
            </Suspense>
          </div>
        </div>
      )
    }
    
    const mapStateToProps = (state) => {
      return {
        router: state.getIn(['light', 'router']),
        theme: state.getIn(['light', 'theme']),
      }
    }
    
    const mapDispatchToProps = (dispatch) => {
      return {
        onSetState(key, value) {
          dispatch({ type: 'SET_LIGHT_STATE', key, value })
        },
        onDispatch(action) {
          dispatch(action)
        },
      }
    }
    
    export default connect(mapStateToProps, mapDispatchToProps)(List)
    

    使用useEffect也可以优化性能:

    import React, { Suspense, useEffect, useState} from 'react'
    import { Switch, Route } from 'react-router-dom'
    import { connect } from 'react-redux'
    import Loading from '../../../components/light/Loading'
    import Header from './Header'
    import Nav from './Nav'
    
    function List(props) {
      const [listDom, setListDom] = useState([])
      const { router } = props
    
    
      // 只有router变化时才会重新渲染listDom,useEffect函数可以起到性能优化的作用
      useEffect(() => {
        const listDom = []
        const listRender = (arr) => {
          arr.forEach((item) => {
            if (item.children) {
              listRender(item.children)
            } else {
              listDom.push(
                <Route
                  key={item.path}
                  path={item.path}
                  component={item.component}
                ></Route>
              )
            }
          })
        }
        listRender(router.toJS())
        setListDom(listDom)
      }, [router])
    
    
      return (
        <div className="m-list">
          <Header></Header>
          <div className="m-list-info">
            <Nav></Nav>
            <Suspense fallback={<Loading isLazyLoading={true}></Loading>}>
              <Switch>{listDom}</Switch>
            </Suspense>
          </div>
        </div>
      )
    }
    
    const mapStateToProps = (state) => {
      return {
        router: state.getIn(['light', 'router']),
        theme: state.getIn(['light', 'theme']),
      }
    }
    
    const mapDispatchToProps = (dispatch) => {
      return {
        onSetState(key, value) {
          dispatch({ type: 'SET_LIGHT_STATE', key, value })
        },
        onDispatch(action) {
          dispatch(action)
        },
      }
    }
    
    export default connect(mapStateToProps, mapDispatchToProps)(List)
    
  • 相关阅读:
    EMQ X v4.3 正式发布:性能大幅提升,更好用的多语言扩展
    全新 EMQ X Cloud 物联网云平台重磅发布
    MQTT 和 CoAP 在 EMQ X 世界的一次「约会」
    Python MQTT 异步框架 —— HBMQTT
    EMQ X 团队:连接数亿关键 IoT 设备|EMQ 2021 全球招聘季
    让每一个来自社区的声音被听见、有回响:EMQ X 开源项目正式采用 RFC 流程
    Kuiper 1.1.2 正式发布
    Xamarin.Forms iOS打包上传AppStore,奇妙的崩溃 EXC_CRASH (SIGABRT)
    大数据系列修炼-Scala课程01
    文本摘要简述
  • 原文地址:https://www.cnblogs.com/xutongbao/p/14876262.html
Copyright © 2011-2022 走看看