gpt4 book ai didi

javascript - 使用 forwardRef react 总是更新子组件,即使使用备忘录

转载 作者:行者123 更新时间:2023-12-05 00:36:44 25 4
gpt4 key购买 nike

所以我有一个 DatePicker 子组件 我需要访问它的ref通过forwardRef来自 家长 .基本上一切正常。

但是有一个问题。

每次我在 Parent Other 上更新一些东西时子组件 没有任何关系DatePickerChild ,DatePicker 仍在渲染,即使它不应该渲染。

我试图删除 ref 从父级到子级的传递,然后每次我对要解决的其他组件进行更新时,该组件都不再重新渲染。

<NativeDatePicker
ref={datePickerRef} // <-- When I comment this component is not rendering anymore.
currentDate={values.birthday}
onDateChange={handleBirthdayChange}
/>

我已经通过使用 useCallback 开始使用回调内存。优化,但仍然没有运气。

下面是我的代码:

日期选择器.tsx
type Props = {
// ref: RefObject<DatePicker>;
currentDate: string | Date | undefined;
onDateChange: (newDate: string) => void;
};

const NativeDatePicker = forwardRef(
({ currentDate, onDateChange }: Props, ref: any) => {
console.log('tadah!');
return (
<DatePicker
ref={ref}
style={wrapperStyle.wrapper}
date={currentDate}
mode="date"
placeholder="select date"
format="YYYY-MM-DD"
// minDate="2016-05-01"
// maxDate={Date.now()}
confirmBtnText="Confirm"
cancelBtnText="Cancel"
customStyles={styles}
onDateChange={onDateChange}
/>
);
},
);

const MemoizedNativeDatePicker = memo(NativeDatePicker);

我不会在我的 中显示所有代码父组件 只有我传递给 DatePicker 的 Prop 和引用资料。
 // Memoized Callback Function
const handleBirthdayChange = useCallback(
(newDate: string) => setFieldValue('birthday', newDate),
[setFieldValue],
);

const datePickerRef = createRef<DatePicker>();
const datePickerRefOnPress = () => datePickerRef.current!.onPressDate();

我错过了什么吗?谢谢你的帮助。

最佳答案

您正在使用 createRef 创建一个 ref ,在每次重新渲染时都会返回一个新的 ref 实例,因此会导致使用 React.memo 优化子重新渲染失败.

您应该改用 useRef Hook 功能组件以创建引用

const datePickerRef = useRef<DatePicker>();

关于javascript - 使用 forwardRef react 总是更新子组件,即使使用备忘录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62385850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com