瀏覽代碼

Replace deprecated type SFC with FunctionComponent PR988

zhongsp 4 年之前
父節點
當前提交
ea67fd0323

+ 8 - 6
doc/handbook/JSX.md

@@ -105,12 +105,12 @@ import MyComponent from "./myComponent";
 
 有两种方式可以定义基于值的元素:
 
-1. 无状态函数组件 (SFC)
+1. 函数组件 (FC)
 2. 类组件
 
-由于这两种基于值的元素在JSX表达式里无法区分,因此TypeScript首先会尝试将表达式做为无状态函数组件进行解析。如果解析成功,那么TypeScript就完成了表达式到其声明的解析操作。如果按照无状态函数组件解析失败,那么TypeScript会继续尝试以类组件的形式进行解析。如果依旧失败,那么将输出一个错误。
+由于这两种基于值的元素在JSX表达式里无法区分,因此TypeScript首先会尝试将表达式做为函数组件进行解析。如果解析成功,那么TypeScript就完成了表达式到其声明的解析操作。如果按照函数组件解析失败,那么TypeScript会继续尝试以类组件的形式进行解析。如果依旧失败,那么将输出一个错误。
 
-### 无状态函数组件
+### 函数组件
 
 正如其名,组件被定义成JavaScript函数,它的第一个参数是`props`对象。
 TypeScript会强制它的返回值可以赋值给`JSX.Element`。
@@ -130,7 +130,7 @@ function ComponentFoo(prop: FooProp) {
 const Button = (prop: {value: string}, context: { color: string }) => <button>
 ```
 
-由于无状态函数组件是简单的JavaScript函数,所以我们还可以利用函数重载。
+由于函数组件是简单的JavaScript函数,所以我们还可以利用函数重载。
 
 ```ts
 interface ClickableProps {
@@ -151,6 +151,8 @@ function MainButton(prop: SideProps): JSX.Element {
 }
 ```
 
+> 注意:函数组件之前叫做无状态函数组件(SFC)。由于在当前React版本里,函数组件不再被当作是无状态的,因此类型`SFC`和它的别名`StatelessComponent`被废弃了。
+
 ### 类组件
 
 我们可以定义类组件的类型。
@@ -240,7 +242,7 @@ declare namespace JSX {
 至于该使用哪个属性来确定类型取决于`JSX.ElementAttributesProperty`。
 它应该使用单一的属性来定义。
 这个属性名之后会被使用。
-TypeScript 2.8,如果未指定`JSX.ElementAttributesProperty`,那么将使用类元素构造函数或SFC调用的第一个参数的类型。
+TypeScript 2.8,如果未指定`JSX.ElementAttributesProperty`,那么将使用类元素构造函数或函数组件调用的第一个参数的类型。
 
 ```ts
 declare namespace JSX {
@@ -280,7 +282,7 @@ declare namespace JSX {
 
 > 注意:如果一个属性名不是个合法的JS标识符(像`data-*`属性),并且它没出现在元素属性类型里时不会当做一个错误。
 
-另外,JSX还会使用`JSX.IntrinsicAttributes`接口来指定额外的属性,这些额外的属性通常不会被组件的props或arguments使用 - 比如React里的`key`。还有,`JSX.IntrinsicClassAttributes<T>`泛型类型也可以用来做同样的事情。这里的泛型参数表示类实例类型。在React里,它用来允许`Ref<T>`类型上的`ref`属性。通常来讲,这些接口上的所有属性都是可选的,除非你想要用户在每个JSX标签上都提供一些属性。
+另外,JSX还会使用`JSX.IntrinsicAttributes`接口来指定额外的属性,这些额外的属性通常不会被组件的props或arguments使用 - 比如React里的`key`。还有,`JSX.IntrinsicClassAttributes<T>`泛型类型也可以用来为类组件(非函数组件)指定相同种类的额外属性。这里的泛型参数表示类实例类型。在React里,它用来允许`Ref<T>`类型上的`ref`属性。通常来讲,这些接口上的所有属性都是可选的,除非你想要用户在每个JSX标签上都提供一些属性。
 
 延展操作符也可以使用:
 

+ 1 - 1
doc/handbook/Type Checking JavaScript Files.md

@@ -739,7 +739,7 @@ let myArrow = x => x * x;
  * Which means it works for stateless function components in JSX too
  * @param {{a: string, b: number}} test - Some param
  */
-var sfc = (test) => <div>{test.a.charAt(0)}</div>;
+var fc = (test) => <div>{test.a.charAt(0)}</div>;
 
 /**
  * A parameter can be a class constructor, using Closure syntax.

+ 1 - 1
doc/handbook/tutorials/React & Webpack.md

@@ -124,7 +124,7 @@ export const Hello = (props: HelloProps) => <h1>Hello from {props.compiler} and
 
 ```
 
-注意这个例子使用了[无状态的功能组件](https://reactjs.org/docs/components-and-props.html#functional-and-class-components),我们可以让它更像一点*类*。
+注意这个例子使用了[函数组件](https://reactjs.org/docs/components-and-props.html#functional-and-class-components),我们可以让它更像一点*类*。
 
 ```ts
 import * as React from "react";

+ 2 - 2
doc/handbook/tutorials/React.md

@@ -142,7 +142,7 @@ function getExclamationMarks(numChars: number) {
 注意我们定义了一个类型`Props`,它指定了我们组件要用到的属性。
 `name`是必需的且为`string`类型,同时`enthusiasmLevel`是可选的且为`number`类型(你可以通过名字后面加`?`为指定可选参数)。
 
-我们创建了一个无状态的函数组件(Stateless Functional Components,SFC)`Hello`。
+我们创建了一个函数组件`Hello`。
 具体来讲,`Hello`是一个函数,接收一个`Props`对象并拆解它。
 如果`Props`对象里没有设置`enthusiasmLevel`,默认值为`1`。
 
@@ -170,7 +170,7 @@ class Hello extends React.Component<Props, object> {
 ```
 
 当我们的[组件具有某些状态](https://reactjs.org/docs/state-and-lifecycle.html)的时候,使用类的方式是很有用处的。
-但在这个例子里我们不需要考虑状态 - 事实上,在`React.Component<Props, object>`我们把状态指定为了`object`,因此使用SFC更简洁。
+但在这个例子里我们不需要考虑状态 - 事实上,在`React.Component<Props, object>`我们把状态指定为了`object`,因此使用函数组件更简洁。
 当在创建可重用的通用UI组件的时候,在表现层使用组件局部状态比较适合。
 针对我们应用的生命周期,我们会审视应用是如何通过Redux轻松地管理普通状态的。
 

+ 2 - 2
doc/release-notes/TypeScript 1.8.md

@@ -122,9 +122,9 @@ switch (x % 3) {
 }
 ```
 
-## React 无状态的函数组件
+## React的函数组件
 
-TypeScript 现在支持[无状态的函数组件](https://reactjs.org/docs/components-and-props.html#functional-and-class-components).
+TypeScript 现在支持[函数组件](https://reactjs.org/docs/components-and-props.html#functional-and-class-components).
 它是可以组合其他组件的轻量级组件.
 
 ```ts

+ 1 - 1
doc/release-notes/TypeScript 3.0.md

@@ -317,7 +317,7 @@ let el = <Greet />
 
 使用`static defaultProps: Pick<Props, "name">;`做为显式的类型注释,或者不添加类型注释。
 
-对于无状态的函数组件(SFCs),使用ES2015默认的初始化器:
+对于函数组件(之前叫做SFC),使用ES2015默认的初始化器:
 
 ```tsx
 function Greet({ name = "world" }: Props) {

+ 1 - 1
doc/release-notes/TypeScript 3.1.md

@@ -37,7 +37,7 @@ readImage.sync = (path: string) => {
 此外,我们还在`readImage`上提供了一个便捷的函数`readImage.sync`。
 
 一般来说,使用ECMAScript导出是个更好的方式,但这个新功能支持此风格的代码能够在TypeScript里执行。
-此外,这种属性声明的方式允许我们表达一些常见的模式,例如React无状态函数组件(SFCs)里的`defaultProps`和`propTpes` 。
+此外,这种属性声明的方式允许我们表达一些常见的模式,例如React函数组件(之前叫做SFC)里的`defaultProps`和`propTpes` 。
 
 ```ts
 export const FooComponent = ({ name }) => (