您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    在 React 中运用 Context 的两点留意事项
    时间:2021-08-26 21:05 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

    在 React 中运用 Context 的两点留意事项

    Context是个好东西,先不论代数效应之类纯实际的概念,能在组件树上无视深度地透传形状确实能给开发带来很大的便利。

    但假设Context的运用上不留意一些细节,运用不当,对运用的功用是有能够形成灾难性影响的。近期在做一个产品的功用优化的时分,总结出来微乎其微的两点“常识”。

    关于顺序

    先来看一张图,我愿称之为世界名画:

    在 React 中运用 Context 的两点留意事项


    这就一演示的界面,没什么东西,我的逻辑也很复杂:

    import React, {memo, useReducer} from 'react'

    import {ConfigProvider, Tooltip} from 'antd'

    import ZH_CN from 'antd/lib/locale-provider/zh_CN'

    import 'antd/dist/antd.min.css'

     

    const Text = ({text}) => { 

        return ( 

            <Tooltip title="Tooltip" placement="top"

                <div>{text}</div> 

            </Tooltip> 

        ); 

    }; 

     

    const MemoedText = memo(Text); 

     

    const ConfigProviderInside = () => { 

        const [counter, inc] = useReducer((v) => v + 11); 

     

        return ( 

            <ConfigProvider locale={ZH_CN}> 

                <div> 

                    <MemoedText text="This is some text." /> 

                    <div>App Counter: {counter}</div> 

                    <button type="button" onClick={inc}> 

                        FORCE UPDATE 

                    </button> 

                </div> 

            </ConfigProvider> 

        ); 

    }; 

    点一下按钮,整个界面都更新了一遍,是不是也还算正常?那假设做一下“复杂”地优化呢:

    在 React 中运用 Context 的两点留意事项


    是不是很酸爽?我干了什么呢:

    const ConfigProviderOutside = () => { 

        const [counter, inc] = useReducer((v) => v + 11); 

     

        return ( 

            <div> 

                <MemoedText text="This is some text." /> 

                <div>App Counter: {counter}</div> 

                <button type="button" onClick={inc}> 

                    FORCE UPDATE 

                </button> 

            </div> 

        ); 

    }; 

     

    render( 

        <ConfigProvider> 

            <ConfigProviderOutside /> 

        </ConfigProvider> 

    ); 

    我把antd的ConfigProvider放到了外面,就这一行代码。

    (责任编辑:admin)