第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

React - 用作導(dǎo)致額外渲染的道具

React - 用作導(dǎo)致額外渲染的道具

元芳怎么了 2021-06-01 15:12:11
我正在處理一些繁重的表格。因此,我試圖在我能找到的任何地方擠壓性能。最近我添加了Why-did-you-render插件,以更深入地了解可能導(dǎo)致我的頁面變慢的原因。我注意到,例如,當(dāng)我單擊有關(guān)所有其他組件的復(fù)選框組件時(shí)會重新渲染。理由總是一樣的。WDYR 說由于 props 更改而重新渲染:具有相同名稱的不同函數(shù) {prev onChangeHandler: ?} "!==" {next onChangeHandler: ?}我盡可能地尊重我發(fā)現(xiàn)的最佳實(shí)踐指示。我的組件傳遞的回調(diào)函數(shù)遵循這種模式import React, { useState, useEffect } from 'react';import { useTranslation } from 'react-i18next';export function TopLevelComponent({props}){    const defaultData = {name: '', useMale: false, useFemale: false}    const [data, setData] = useState(defData);    const { t } = useTranslation();    const updateState = (_attr, _val) => {        const update = {};        update[_attr] = _val;        setData({ ...data, ...update });    }    const updateName = (_v) => updateState('name', _v);//Text input    const updateUseMale = (_v) => updateState('useMale', _v);//checkbox    const updateUseFemale = (_v) => updateState('useFemale', _v);//checkbox    ...    return <div>        ...        <SomeInputComponent value={data.name} text={t('fullName')} onChangeHandler={updateName} />        <SomeCheckboxComponent value={data.useMale} onChangeHandler={updateUseMale} text={t('useMale')}/>        <SomeCheckboxComponent value={data.useFemale} onChangeHandler={updateUseFemale} text={t('useFemale')}/>        ...    </div>}在這樣的示例中,更改任何輸入(例如:在文本輸入中寫入文本或單擊其中一個(gè)復(fù)選框)將導(dǎo)致其他 2 個(gè)組件以上述理由重新呈現(xiàn)。我想我可以停止使用功能組件并利用該shouldComponentUpdate()功能,但功能組件確實(shí)提供了一些我寧愿保留的優(yōu)勢。我應(yīng)該如何以與一個(gè)輸入交互不會強(qiáng)制更新另一個(gè)輸入的方式編寫我的函數(shù)?
查看完整描述

3 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗(yàn) 獲得超5個(gè)贊

問題源于您定義更改處理程序的方式:

const updateName = (_v) => updateState('name', _v)

每次渲染都會調(diào)用這一行,因此,每次渲染組件時(shí),道具都有一個(gè)新的(盡管功能方面相同)值。這同樣適用于所有其他處理程序。

作為一個(gè)簡單的解決方案,您可以將功能組件升級為完全成熟的組件并在渲染函數(shù)之外緩存處理程序,也可以shouldComponentUpdate()在子組件中實(shí)現(xiàn)。


查看完整回答
反對 回復(fù) 2021-06-03
  • 3 回答
  • 0 關(guān)注
  • 218 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號