首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React-Transition-Group: StrictMode中不推荐使用findDOMNode

React-Transition-Group: StrictMode中不推荐使用findDOMNode
EN

Stack Overflow用户
提问于 2021-08-07 15:38:20
回答 1查看 349关注 0票数 0

我在react中使用动画库react-transition-group,使用<TransitionGroup><CSSTransition>制作待办事项列表的动画,如下所示

代码语言:javascript
复制
<ul>
   <TransitionGroup className="todo-list">
      {incompleteTodos.map((task) => (
      <CSSTransition key={task.id} timeout={500} classNames={styles}>
         <li key={task.id}>
            <TodoTask
               todo={task}
               onClick={(todo) =>
            toggleTodo({ data: todo })}
            />
         </li>
      </CSSTransition>
      ))}
   </TransitionGroup>
</ul>

但我在控制台中得到的错误如下:

我读到关于在这个official changeloggit issue中提到的CSSTransition元素上使用nodeRef={nodeRef}的文章,如下所示,但随后它开始变得奇怪,即一些元素在UI中不能正确显示,如下面的代码片段所示:

代码语言:javascript
复制
const nodeRef = React.useRef(null)

代码语言:javascript
复制
<ul>
   <TransitionGroup className="todo-list">
      {incompleteTodos.map((task) => (
      <CSSTransition
         key={task.id}
         timeout={500}
         classNames={styles}
         nodeRef={nodeRef}
         >
         <li key={task.id} ref={nodeRef}>
            <TodoTask
               todo={task}
               onClick={(todo) =>
            toggleTodo({ data: todo })}
            />
         </li>
      </CSSTransition>
      ))}
   </TransitionGroup>
</ul>

此屏幕截图是在CSSTransition中应用nodeRef后拍摄的

EN

回答 1

Stack Overflow用户

发布于 2021-08-07 17:25:18

您需要为每个CSSTransition创建一个单独的ref。最简单的方法是创建一个自定义组件:

代码语言:javascript
复制
<ul>
   <TransitionGroup className="todo-list">
      {incompleteTodos.map((task) =>
        <TransitionTodo key={task.id} todo={task}/>}
  </TransitionGroup>
</ul>
代码语言:javascript
复制
function TransitionTodo({todo}) {
  nodeRef = useRef();
  return (
    <CSSTransition
       timeout={500}
       classNames={styles}
       nodeRef={nodeRef}
     >
       <li ref={nodeRef}>
          <TodoTask
             todo={todo}
             onClick={(todo) =>
               toggleTodo({ data: todo })}
          />
       </li>
    </CSSTransition>
  );
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68693826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档