标签: create-ref

即使使用备忘录,使用forwardRef做出反应也总是更新子组件

所以我有一个 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)

javascript ref reactjs react-forwardref create-ref

4
推荐指数
1
解决办法
8707
查看次数

使用 useRef 或 createRef 而不是内联引用有什么优点?

我正在进行代码审查,发现另一位开发人员编写的代码,例如:

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渲染函数两次,因此建议避免。

我想知道对此还有什么其他解释?

ref reactjs use-ref create-ref

4
推荐指数
1
解决办法
1630
查看次数