所以我有一个 DatePicker ChildComponent,我需要从Parentref访问它。基本上一切正常。forwardRef
但有一个问题。
每次我更新与DatePickerChild没有任何关系的Parent Other ChildComponents上的某些内容时,DatePicker 仍然会呈现,即使它不应该呈现。
我尝试删除从父级到子级的引用传递,然后每次我对我想要解决的其他组件进行更新时,该组件就不再重新渲染。
<NativeDatePicker
ref={datePickerRef} // <-- When I comment this component is not rendering anymore.
currentDate={values.birthday}
onDateChange={handleBirthdayChange}
/>
Run Code Online (Sandbox Code Playgroud)
我已经开始通过使用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" …Run Code Online (Sandbox Code Playgroud) 我正在进行代码审查,发现另一位开发人员编写的代码,例如:
function sampleComponent() {
let divRef = {};
return (
<div ref={(el) => { divRef = el }}></div>
)
}
Run Code Online (Sandbox Code Playgroud)
然后使用 divRef 作为 DOM 元素的引用。
然而,我知道的模式是createRef在类组件中使用,useRef在功能组件中使用钩子。甚至 ReactJS 官方https://reactjs.org/docs/refs-and-the-dom.html也表示要避免未来 React 版本的内联引用。这是一个要写的遗留模式吗?
到目前为止我能研究的是,内联会ref渲染函数两次,因此建议避免。
我想知道对此还有什么其他解释?