反应弹簧过渡'leave'动画不起作用



当春季项目留下dom nothing(无动画(时发生。

完整代码框:https://codesandbox.io/s/jzz6xv1y4w

const Todo = ({ todo, onDeleteClick }) => {
  const transition = useTransition(todo, null, {
    from: { opacity: 0, transform: "translateY(-10px)" },
    enter: { opacity: 1, transform: "translateY(0)" },
    leave: { opacity: 0, transform: "translateY(10px)" }
  });
  return transition.map(
    ({ item, props, key }) =>
      item && (
        <TodoContainer style={props} key={key}>
          <span>{todo}</span>
          <button onClick={onDeleteClick}>X</button>
        </TodoContainer>
      )
  );
};

将过渡移至应用程序组件。过渡应处理所有戒酒。这样,它可以控制Enter并留下事件。

<div className="App">
  <h1>Todo App</h1>
  <input type="text" ref={ref} />
  <input type="submit" onClick={() => addTodo(ref.current.value)} />
  {/*  */}
  {transition.map(
    ({ item, props, key }, i) =>
      item && (
        <Todo
          transition={props}
          todo={item}
          onDeleteClick={() => deleteTodo(i)}
          key={key}
        />
      )
  )}
</div>

(;

TODO组件将更简单:

const Todo = ({ todo, onDeleteClick, transition }) => {
  return (
    <TodoContainer style={transition}>
      <span>{todo}</span>
      <button onClick={onDeleteClick}>X</button>
    </TodoContainer>
  );
};

还确保您为过渡提供了独特的钥匙。它有助于确定要输入哪个组件并离开哪个组件。我将托尔文字用作示例中的键。

这是一个示例:https://codesandbox.io/s/goofy-chaplygin-whvt4

您必须在transition.map中渲染所有元素。现在,您将它们渲染在transition.map之外,但将每个元素包裹在transition.map中。您的Todo元素在此处渲染和删除:

{todos.map((x, i) => (
    <Todo todo={x} onDeleteClick={() => deleteTodo(i)} key={x} />
))}

,但必须在此处渲染并删除它们:

return transition.map(
    ({ item, props, key }) => (
        <TodoContainer style={props} key={key}>
          <span>{item}</span>
          <button onClick={onDeleteClick}>X</button>
        </TodoContainer>
      )
  );

您需要更改组件Todo。它应该渲染所有项目。

我为您创建一个工作示例:https://codesandbox.io/s/trusting-dewdney-jerxy

相关内容

  • 没有找到相关文章

最新更新