1

我的代码:


const MyComponent: React.FC = () => {

const ParentReference = useRef(null);

return(
<Parent className="d-flex flex-row" ref={ParentReference}>
          <ChildComponent
            className="mr-3"
            target={ParentReference.current}
          />
          <AnotherChild className="mr-3" />
        </Nav>
)};

如上面的代码所示,我使用 useRef 钩子创建了一个引用并将其附加到我的 ParentComponent。现在我通过目标道具传递给 ChildComponent 并使用它在孩子内部进行一些 dom 操作。

问题:对于组件的第一次渲染, 我将ParentReference设为null。(如果我在更改 ParentReference 时强制重新渲染,它将更新并重新渲染整个组件,那么它将具有价值。)

如何在我的子组件中获取 ParentReference 以进行初始渲染?

4

1 回答 1

2

segFault对此答案的引用是正确的。你的 ref 直到你的组件第一次渲染之后才被初始化。因此,当您渲染<ChildComponent target={ParentReference.current} />ref 时,尚未定义 ref。

在这种情况下,您可能会考虑使用 auseEffect在第一次渲染时设置状态变量,并在设置状态变量后有条件地渲染<ChildComponent />

const MyComponent: React.FC = () => {

const ParentReference = useRef(null);

// define state variable defining the ref as not yet ready
const [refReady, setRefReady] = useState(false)
// On first mount, set the variable to true, as the ref is now available
useEffect( () => {
  setRefReady(true)
}, [])

return(
<Parent className="d-flex flex-row" ref={ParentReference}>
          {refReady && <ChildComponent
            className="mr-3"
            target={ParentReference.current}
          />}
          <AnotherChild className="mr-3" />
        </Nav>
)};
于 2020-04-14T14:59:18.420 回答