reactjs - 将 forwardRef 添加到功能组件是否是重大更改?

标签 reactjs semantic-versioning

TL;DR:我在库中有一个功能组件,它具有 react@^16.3.0 作为对等依赖项。如果我将此组件包装在 React.forwardRef 中,这是否是重大更改?

根据 forwarding Refs#Note for component library maintainers 中的 react 文档将 ref 转发引入您的组件是一项重大更改。

我对类组件的理解是这样的,因为之前你会得到一个类的引用,而现在你会得到一个对你将它转发到的任何东西的引用。

然而,对于函数组件,refs 从一开始就不受支持,并且会触发警告。

可以安全地假设将 forwardRef 引入功能组件是一项功能而不是重大更改吗?

对我来说,这类似于向您的 API 添加新属性。之前我会得到类型错误,而现在我得到一个定义的值。总的来说,这听起来像是文档声明不存在的功能实际上是一个功能,这意味着每个功能都是重大更改。

编辑: React 已经需要作为 ^16.3.0 的对等体,因此我们已经可以访问 forwardRef。我们不会要求用户升级他们的 React 版本。

最佳答案

forwardRef 可能会为库用户提供重大更改,无论组件类型如何,因为这首先取决于库提供的公共(public) API:

When you start using forwardRef in a component library, you should treat it as a breaking change and release a new major version of your library. This is because your library likely has an observably different behavior (such as what refs get assigned to, and what types are exported)

以前,ref 应该是 DOM 元素或类实例。现在 ref 可能是其他东西。 If类组件

// can be used like <Foo ref={this.foo}/> and this.foo.doFoo()
class Foo extends Component {
  doFoo() {}
  ...
}

替换为

const Foo = forwardRef((props, ref) => {
  ref.current = { doFoo: () => {} };
  return ...;
});

公共(public) API,如果用户已经将其视为类实例,这可能会引入重大变化,例如在测试中。

另一种场景是可以直接调用的功能组件like suggested here为它的 child 提供一个引用。这是一个 hack,如果功能组件被替换为 forwardRef,将会中断。

另一件事是 forwardRef 从 16.3 开始可用,无法有效地填充。 React 版本要求也可能引入重大变更。

关于reactjs - 将 forwardRef 添加到功能组件是否是重大更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53447432/

相关文章:

javascript - 英雄横幅轮播与 Gatsby + Contentful + react 响应式轮播

git - 如果Git Workflow具有增量版本控制功能,为什么我们需要语义版本控制?

php - 更正标记版本中的 PHP 版本要求

javascript - 将正则表达式字符串 react 为 html

reactjs - 使用 useRef 滚动到 react 元素中的 y 位置

javascript - SCSS根据id添加动画

npm - 发布后版本控制和 SemVer 2.0(语义版本控制)

python - 在主分支 merge 时更改 Python 包版本

bower - 解析 Bower 的语义版本语法

javascript - 在 componentDidUpdate 或 handleSubmit 上使用 Formik setFieldValue(错误 : not a function)