在尝试将react 路由与react-transition-group结合使用时,我遇到了与 findDOMnode 弃用相关的警告,警告指出:
index.js:1 警告:在 StrictMode 中不推荐使用 findDOMNode。findDOMNode 被传递了一个在 StrictMode 中的 Transition 实例。相反,直接将 ref 添加到要引用的元素。在此处了解有关安全使用 refs 的更多信息:https ://reactjs.org/link/strict-mode-find-node
上述警告指的是以下代码:
<Route key={path} path={path} exact>
{({match})=>(
<CSSTransition
in={match!=null}
timeout={300}
classNames="page"
unmountOnExit
mountOnEnter
>
<div className="page">
<Component />
</div>
</CSSTransition>
)}
</Route>)
我第一次尝试摆脱该警告是按照建议使用 useRef :
const nodeRef = useRef(null);
将 nodeRef 作为 CSStransation 元素的 ref 属性传递,但警告仍然出现。
出于某种原因,我只能通过传递我也在 CSStransition 元素的“in”道具中使用的触发事件来消除警告,如下所示:
<Route key={path} path={path} exact>
{({match})=>(
<CSSTransition
ref={nodeRef}
in={match!=null}
timeout={300}
classNames="page"
unmountOnExit
mountOnEnter
key={match!=null} <------------ Adding this removed the warning
>
<div className="page">
<Component />
</div>
</CSSTransition>
)}
</Route>)
现在一切都很顺利,但我真的不明白为什么,即使我从 CSStransition 元素中删除了 ref,我也不会再收到任何警告。
有人不明白为什么会发生这种情况吗?