
addTransitionType()
ReactAPI 参考:React 核心
title: addTransitionType
version: canary
addTransitionTypeAPI 目前仅在 React 的 Canary 和 Experimental 频道中可用。
addTransitionType 允许你指定过渡的原因。
js
startTransition(() => {
addTransitionType('my-transition-type');
setState(newState);
});
参考
addTransitionType
参数
type: 要添加的过渡类型。可以是任意字符串。
返回值
addTransitionType 不返回任何值。
注意事项
- 如果多个过渡被组合在一起,所有过渡类型都会被收集。你也可以为一个过渡添加多个类型。
- 过渡类型在每次提交(commit)后重置。这意味着
<Suspense>回退(fallback)会在startTransition之后关联这些类型,但在显示内容时不会关联。
用法
添加过渡的原因
在 startTransition 内部调用 addTransitionType 来指示过渡的原因:
[[1, 6, "addTransitionType"], [2, 5, "startTransition", [3, 6, "'submit-click'"]]]
import { startTransition, addTransitionType } from 'react';
function Submit({action) {
function handleClick() {
startTransition(() => {
addTransitionType('submit-click');
action();
});
}
return <button onClick={handleClick}>Click me</button>;
}
当你在 startTransition 作用域内调用 addTransitionType 时,React 会将 submit-click 关联为该过渡的原因之一。
目前,过渡类型可用于根据触发过渡的原因来定制不同的动画。你有以下三种使用方式可供选择:
未来,我们计划支持更多基于过渡原因的使用场景。
使用浏览器视图过渡类型定制动画
当一个 ViewTransition 由某个过渡激活时,React 会将所有过渡类型作为浏览器的视图过渡类型添加到该元素上。
这允许你基于 CSS 作用域定制不同的动画:
-
js
function Component() {
return (
<ViewTransition>
<div>Hello</div>
</ViewTransition>
);
}
startTransition(() => {
addTransitionType('my-transition-type');
setShow(true);
});
css
:root:active-view-transition-type(my-transition-type) {
&::view-transition-...(...) {
...
}
}
使用 View Transition 类定制动画
你可以通过向 View Transition 类传递一个对象,根据类型为已激活的 ViewTransition 定制动画:
js
function Component() {
return (
<ViewTransition enter={{
'my-transition-type': 'my-transition-class',
}}>
<div>Hello</div>
</ViewTransition>
);
}
// ...
startTransition(() => {
addTransitionType('my-transition-type');
setState(newState);
});
如果多个类型匹配,则它们会合并在一起。如果没有类型匹配,则使用特殊的 "default" 条目。如果任何类型的值为 "none",则该值优先,并且 ViewTransition 被禁用(不会分配名称)。
这些可以与 enter/exit/update/layout/share props 组合使用,以根据触发类型和过渡类型进行匹配。
js
<ViewTransition enter={{
'navigation-back': 'enter-right',
'navigation-forward': 'enter-left',
}}
exit={{
'navigation-back': 'exit-right',
'navigation-forward': 'exit-left',
}}>
使用 ViewTransition 事件定制动画
你可以使用 View Transition 事件,根据类型以命令式方式为已激活的 ViewTransition 定制动画:
<ViewTransition onUpdate={(inst, types) => {
if (types.includes('navigation-back')) {
...
} else if (types.includes('navigation-forward')) {
...
} else {
...
}
}}>
这允许你根据原因选择不同的命令式动画。
帮助我们改进文档
发现翻译问题或内容错误?请告诉我们。
