Reactjs 这是使用React.usemo的用例之一吗?
像下面这样返回JSX是否被认为是一种昂贵的计算/计算?我读了几篇文章,包括Kent C Dodds关于何时使用useMemo和useCallback的文章。他们中的大多数人明确表示,当你的应用程序运行缓慢时,应该使用这些API。想知道React社区对此有何看法 这是我的密码:Reactjs 这是使用React.usemo的用例之一吗?,reactjs,react-usememo,Reactjs,React Usememo,像下面这样返回JSX是否被认为是一种昂贵的计算/计算?我读了几篇文章,包括Kent C Dodds关于何时使用useMemo和useCallback的文章。他们中的大多数人明确表示,当你的应用程序运行缓慢时,应该使用这些API。想知道React社区对此有何看法 这是我的密码: ...few codes above const dynamicJSX = React.useMemo(() => { switch(input.vitalType) { ca
...few codes above
const dynamicJSX = React.useMemo(() => {
switch(input.vitalType) {
case 'BLOOD_PRESSURE': {
return (
<Col span={24}>
<Row gutter={16}>
<Col lg={12} md={24} sm={24} xs={24}>
<Input
type="text"
name="systolic"
label={t('label.systolic')}
onChange={onChange}
value={input.systolic}
error={error.systolic}
required={true}
onPressEnter={onPressEnter}
/>
</Col>
<Col lg={12} md={24} sm={24} xs={24}>
<Input
type="text"
name="diastolic"
label={t('label.diastolic')}
onChange={onChange}
value={input.diastolic}
error={error.diastolic}
required={true}
onPressEnter={onPressEnter}
/>
</Col>
</Row>
</Col>
)
}
case 'GLUCOSE': {
return (
<Col span={24}>
<Row gutter={16}>
<Col lg={12} md={24} sm={24} xs={24}>
<Select
label={t('label.conditions')}
name="conditions"
required={true}
onChange={(value) => onSelectChange('conditions', value)}
value={input.conditions}
error={error.conditions}
placeholder={t('opt.select_one')}
dropOptions={[
{ label: t('opt.fasting'), value: 'FASTING' },
{ label: t('opt.after_meal'), value: 'AFTER_MEAL' },
{ label: t('opt.hours_after_meal'), value: '2_TO_3_HOURS_AFTER_MEAL' }
]}
/>
</Col>
<Col lg={12} md={24} sm={24} xs={24}>
<Input
type="text"
name="value"
label={t('label.value')}
onChange={onChange}
value={input.value}
error={error.value}
required={true}
onPressEnter={onPressEnter}
/>
</Col>
</Row>
</Col>
)
}
default:
return (
<Col lg={12} md={24} sm={24} xs={24}>
<Input
type="text"
name="value"
label={t('label.value')}
value={input.value}
error={error.value}
required={true}
onPressEnter={onPressEnter}
onChange={onChange}
/>
</Col>
)
}
}, [input.vitalType]);
return (
<div>
/// few codes here
{dynamicJSX}
</div>
)
…上面的代码很少
常量dynamicJSX=React.useMoom(()=>{
开关(输入。vitalType){
“血压”病例:{
返回(
)
}
案例“葡萄糖”:{
返回(
onSelectChange('条件',值)}
值={input.conditions}
error={error.conditions}
占位符={t('opt.select_one')}
丢弃选项={[
{label:t('opt.fasting'),值:'fasting'},
{label:t('opt.after_-fine'),value:'after_-fine'},
{label:t('opt.hours\u after\u fine'),值:'2\u到\u 3\u hours\u fine'}
]}
/>
)
}
违约:
返回(
)
}
},[input.vitalType]);
返回(
///这里很少有代码
{dynamicJSX}
)
首先,您需要在usemo
中指定您正在使用的道具的依赖项,如onChange
,on按Enter
等。现在,在这种情况下,它不会有太大的性能差异,因为组件将以任何方式重新渲染属性更改,usemo
usemo
的主要用例是副作用,当我们做一些计算时,比如作为异步任务的结果,最好是将结果记录下来,而不是在每次渲染时重新计算。首先,您需要在usemo
中为您正在使用的道具指定依赖项,比如onChange
,on按Enter键
依此类推。现在,在这种情况下,它不会有太大的性能差异,因为组件将以任何方式重新渲染属性更改,usemo
usemo
的主要用例是副作用,当我们做一些计算时,比如作为异步任务的结果,最好是将结果记录下来,而不是在每次渲染时重新计算。ahh我明白了。其实我很好奇。如果我在不传递依赖项的情况下使用useMemo和useCallback,会发生什么?是否每次都会重新创建它?如果不传递第二个参数作为依赖项数组,则它将在每个渲染上运行。如果您传递空[],则它将仅在第一次渲染时运行。如果您传递数组列表,则它将仅在引用依赖项更改时运行。啊,我明白了。其实我很好奇。如果我在不传递依赖项的情况下使用useMemo和useCallback,会发生什么?是否每次都会重新创建它?如果不传递第二个参数作为依赖项数组,则它将在每个渲染上运行。若您传递空[],那个么它将仅在第一次渲染时运行,若您传递数组列表,那个么它将仅在引用依赖项更改时运行。