Skip to content

Commit b164c80

Browse files
authored
Merge pull request #270 from reactjs/sync-4fc709d0
Sync with reactjs.org @ 4fc709d
2 parents e4b8fe0 + dbf0899 commit b164c80

14 files changed

+343
-286
lines changed

Diff for: content/blog/2017-09-08-dom-attributes-in-react-16.md

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ In React 16, we are making a change. Now, any unknown attributes will end up in
2929
React has always provided a JavaScript-centric API to the DOM. Since React components often take both custom and DOM-related props, it makes sense for React to use the `camelCase` convention just like the DOM APIs:
3030

3131
```js
32-
<div tabIndex="-1" />
32+
<div tabIndex={-1} />
3333
```
3434

3535
This has not changed. However, the way we enforced it in the past forced us to maintain a whitelist of all valid React DOM attributes in the bundle:
@@ -55,10 +55,10 @@ With the new approach, both of these problems are solved. With React 16, you can
5555

5656
```js
5757
// Yes, please
58-
<div tabIndex="-1" />
58+
<div tabIndex={-1} />
5959

6060
// Warning: Invalid DOM property `tabindex`. Did you mean `tabIndex`?
61-
<div tabindex="-1" />
61+
<div tabindex={-1} />
6262
```
6363

6464
In other words, the way you use DOM components in React hasn't changed, but now you have some new capabilities.
@@ -120,7 +120,7 @@ Below is a detailed list of them.
120120
* **Known attributes with a different canonical React name:**
121121

122122
```js
123-
<div tabindex="-1" />
123+
<div tabindex={-1} />
124124
<div class="hi" />
125125
```
126126

Diff for: content/blog/2020-09-22-introducing-the-new-jsx-transform.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ If you are using [eslint-plugin-react](https://github.com/yannickcr/eslint-plugi
192192

193193
### TypeScript {#typescript}
194194

195-
TypeScript supports the new JSX transform in [v4.1 beta](https://devblogs.microsoft.com/typescript/announcing-typescript-4-1-beta/#jsx-factories).
195+
TypeScript supports the new JSX transform in [v4.1](https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/#jsx-factories) and up.
196196

197197
### Flow {#flow}
198198

Diff for: content/community/conferences.md

+270-269
Large diffs are not rendered by default.

Diff for: content/community/meetups.md

+8
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@ permalink: community/meetups.html
88

99
Do you have a local React.js meetup? Add it here! (Please keep the list alphabetical)
1010

11+
## Albania {#albania}
12+
* [Tirana](https://www.meetup.com/React-User-Group-Albania/)
13+
1114
## Argentina {#argentina}
1215
* [Rosario](https://www.meetup.com/es/reactrosario)
1316

@@ -40,9 +43,11 @@ Do you have a local React.js meetup? Add it here! (Please keep the list alphabet
4043
* [Bolivia](https://www.meetup.com/ReactBolivia/)
4144

4245
## Canada {#canada}
46+
* [Halifax, NS](https://www.meetup.com/Halifax-ReactJS-Meetup/)
4347
* [Montreal, QC - React Native](https://www.meetup.com/fr-FR/React-Native-MTL/)
4448
* [Vancouver, BC](https://www.meetup.com/ReactJS-Vancouver-Meetup/)
4549
* [Ottawa, ON](https://www.meetup.com/Ottawa-ReactJS-Meetup/)
50+
* [Toronto, ON](https://www.meetup.com/Toronto-React-Native/events/)
4651

4752
## China {#china}
4853
* [Beijing](https://www.meetup.com/Beijing-ReactJS-Meetup/)
@@ -99,6 +104,9 @@ Do you have a local React.js meetup? Add it here! (Please keep the list alphabet
99104
## Israel {#israel}
100105
* [Tel Aviv](https://www.meetup.com/ReactJS-Israel/)
101106

107+
## Italy {#italy}
108+
* [Milan](https://www.meetup.com/React-JS-Milano/)
109+
102110
## Malaysia {#malaysia}
103111
* [Kuala Lumpur](https://www.kl-react.com/)
104112
* [Penang](https://www.facebook.com/groups/reactpenang/)

Diff for: content/docs/addons-perf.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ In addition to giving you an overview of your app's overall performance, `Perf`
2727
See these articles for an introduction to React performance tooling:
2828

2929
- ["How to Benchmark React Components"](https://medium.com/code-life/how-to-benchmark-react-components-the-quick-and-dirty-guide-f595baf1014c)
30-
- ["Performance Engineering with React"](https://benchling.engineering/performance-engineering-with-react/)
31-
- ["A Deep Dive into React Perf Debugging"](https://benchling.engineering/deep-dive-react-perf-debugging/)
30+
- ["Performance Engineering with React"](https://benchling.engineering/performance-engineering-with-react-e03013e53285)
31+
- ["A Deep Dive into React Perf Debugging"](https://benchling.engineering/a-deep-dive-into-react-perf-debugging-fd2063f5a667)
3232

3333
### Development vs. Production Builds {#development-vs-production-builds}
3434

Diff for: content/docs/faq-versioning.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ React는 [유의적 버전 (semver)](https://semver.org/) 원칙을 따릅니다
2222

2323
### 호환성이 유지되지 않는 변경 {#breaking-changes}
2424

25-
호환성이 유지되지 않는 변경은 모든 사람에게 불편할 수 있습니다. 그래서 주 버전 배포는 최소화하도록 노력합니다. 예를 들어, React 15는 2016년 4월에 배포되었고 React 16은 2017년 9월에 배포되었습니다. 그리고 React 17은 2020년에 가능할 수도 있습니다.
25+
호환성이 유지되지 않는 변경은 모든 사람에게 불편할 수 있습니다. 그래서 주 버전 배포는 최소화하도록 노력합니다. 예를 들어, React 15는 2016년 4월에 배포되었고 React 16은 2017년 9월에 배포되었습니다. 그리고 React 17은 2020년 10월에 배포되었습니다.
2626

2727
대신 부 버전을 변경시킨 배포로 새 기능을 배포합니다. 부 버전 배포는 겸손한 이름에도 불구하고, 주 버전 배포보다 가끔 더 흥미롭고 주목할 만합니다.
2828

Diff for: content/docs/higher-order-components.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ Higher-order components come with a few caveats that aren't immediately obvious
320320

321321
### Don't Use HOCs Inside the render Method {#dont-use-hocs-inside-the-render-method}
322322

323-
React's diffing algorithm (called reconciliation) uses component identity to determine whether it should update the existing subtree or throw it away and mount a new one. If the component returned from `render` is identical (`===`) to the component from the previous render, React recursively updates the subtree by diffing it with the new one. If they're not equal, the previous subtree is unmounted completely.
323+
React's diffing algorithm (called [Reconciliation](/docs/reconciliation.html)) uses component identity to determine whether it should update the existing subtree or throw it away and mount a new one. If the component returned from `render` is identical (`===`) to the component from the previous render, React recursively updates the subtree by diffing it with the new one. If they're not equal, the previous subtree is unmounted completely.
324324

325325
Normally, you shouldn't need to think about this. But it matters for HOCs because it means you can't apply a HOC to a component within the render method of a component:
326326

Diff for: content/docs/legacy-event-pooling.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ permalink: docs/legacy-event-pooling.html
1212
>
1313
>[Read more](/blog/2020/08/10/react-v17-rc.html#no-event-pooling) about this change in React 17.
1414
15-
The [`SyntheticEvent`](/docs/events.html) objects are pooled. This means that the `SyntheticEvent` object will be reused and all properties will be nullified after the event event handler has been called. For example, this won't work:
15+
The [`SyntheticEvent`](/docs/events.html) objects are pooled. This means that the `SyntheticEvent` object will be reused and all properties will be nullified after the event handler has been called. For example, this won't work:
1616

1717
```javascript
1818
function handleChange(e) {

Diff for: content/docs/reference-dom-elements.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ React 16부터는 모든 표준 [또는 사용자 정의](/blog/2017/09/08/dom-a
134134
React는 항상 JavaScript 중심 API를 DOM에 제공했습니다. React 컴포넌트는 사용자 지정 및 DOM 관련 props 둘 다 받아들이기 때문에, React는 DOM API처럼 camelCase를 사용합니다.
135135

136136
```js
137-
<div tabIndex="-1" /> // Just like node.tabIndex DOM API
137+
<div tabIndex={-1} /> // Just like node.tabIndex DOM API
138138
<div className="Button" /> // Just like node.className DOM API
139139
<input readOnly={true} /> // Just like node.readOnly DOM API
140140
```

Diff for: content/docs/reference-javascript-environment-requirements.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ category: Reference
66
permalink: docs/javascript-environment-requirements.html
77
---
88

9-
React 16 버전은 컬렉션 자료형인 [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)[Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)을 사용합니다. 이 기능을 자체적으로 지원하지 않거나(예. IE 11 미만) 지원은 하지만 잘 호환되지 않는(예. IE 11) 오래된 브라우저나 기기에서도 React를 사용해야 한다면 애플리케이션에 [core-js](https://github.com/zloirock/core-js)[babel-polyfill](https://babeljs.io/docs/usage/polyfill/) 같은 전역 폴리필(polyfill)을 포함하는 것도 고려해보세요.
9+
React 16 버전은 컬렉션 자료형인 [Map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map)[Set](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Set)을 사용합니다. 이 기능을 자체적으로 지원하지 않거나(예. IE 11 미만) 지원은 하지만 잘 호환되지 않는(예. IE 11) 오래된 브라우저나 기기에서도 React를 사용해야 한다면 애플리케이션에 [core-js](https://github.com/zloirock/core-js) 같은 전역 폴리필(polyfill)을 포함하는 것도 고려해보세요.
1010

1111
다음은 오래된 브라우저 지원을 위해 core-js 폴리필을 적용한 환경에서 React 16 버전을 사용하는 예시입니다.
1212

Diff for: content/docs/strict-mode.md

+4
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,10 @@ Strict 모드가 자동으로 부작용을 찾아주는 것은 불가능합니
117117

118118
컴포넌트의 constructor와 같은 메서드를 의도적으로 두 번 호출하면 strict mode가 이와 같은 패턴을 쉽게 찾을 수 있도록 합니다.
119119

120+
> 주의
121+
>
122+
> React 17부터 React는 자동으로 `console.log()` 같은 콘솔 메서드를 수정해서 생명주기 함수의 두 번째 호출에서 로그를 찍지 않습니다. 그러나, [회피책을 사용할 수 있다면](https://github.com/facebook/react/issues/20090#issuecomment-715927125) 의도하지 않은 동작이 발생할 수 있습니다.
123+
120124
### 레거시 context API 검사 {#detecting-legacy-context-api}
121125

122126
레거시 context API는 오류가 발생하기 쉬워 이후 릴리즈에서 삭제될 예정입니다. 모든 16.x 버전에서 여전히 돌아가지만, Strict 모드에서는 아래와 같은 경고 메시지를 노출합니다.

Diff for: content/docs/typechecking-with-proptypes.md

+46-2
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ MyComponent.propTypes = {
6363
optionalElementType: PropTypes.elementType,
6464

6565
// prop가 클래스의 인스턴스임을 선언할 수 있습니다.
66-
// 이 경우 JS's instanceof 연산자를 사용합니다.
66+
// 이 경우 JavaScript의 instanceof 연산자를 사용합니다.
6767
optionalMessage: PropTypes.instanceOf(Message),
6868

6969
// 열거형(enum)으로 처리하여 prop가 특정 값들로 제한되도록 할 수 있습니다.
@@ -98,7 +98,7 @@ MyComponent.propTypes = {
9898
// 경고가 보이도록 할 수 있습니다.
9999
requiredFunc: PropTypes.func.isRequired,
100100

101-
// 모든 데이터 타입이 가능한
101+
// 모든 데이터 타입이 가능한 필수값
102102
requiredAny: PropTypes.any.isRequired,
103103

104104
// 사용자 정의 유효성 검사기를 지정할 수도 있습니다.
@@ -195,3 +195,47 @@ class Greeting extends React.Component {
195195
```
196196

197197
`defaultProps``this.props.name`의 값이 부모 컴포넌트에 의해 명시되지 않았을 때 값을 갖도록 할 것입니다. `propTypes`의 타입 확인은 `defaultProps`에도 적용되게 하기 위하여 `defaultProps`가 처리된 뒤에 일어날 것입니다.
198+
199+
### Function Components
200+
201+
함수 컴포넌트를 사용해서 개발한다면, PropTypes를 적절히 적용할 수 있도록 몇 가지 작은 변경사항을 만들어낼 수도 있습니다.
202+
203+
아래와 같은 컴포넌트가 있다고 생각해봅시다.
204+
205+
```javascript
206+
export default function HelloWorldComponent({ name }) {
207+
return (
208+
<div>Hello, {name}</div>
209+
)
210+
}
211+
```
212+
213+
PropTypes를 추가하려면 아래처럼 컴포넌트를 외부에 노출시키기 전에 별도의 함수로 컴포넌트를 선언할 수 있습니다.
214+
215+
```javascript
216+
function HelloWorldComponent({ name }) {
217+
return (
218+
<div>Hello, {name}</div>
219+
)
220+
}
221+
222+
export default HelloWorldComponent
223+
```
224+
225+
그러면, `HelloWorldComponent`에 직접 PropTypes를 추가할 수 있습니다.
226+
227+
```javascript
228+
import PropTypes from 'prop-types'
229+
230+
function HelloWorldComponent({ name }) {
231+
return (
232+
<div>Hello, {name}</div>
233+
)
234+
}
235+
236+
HelloWorldComponent.propTypes = {
237+
name: PropTypes.string
238+
}
239+
240+
export default HelloWorldComponent
241+
```

Diff for: content/docs/uncontrolled-components.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ class NameForm extends React.Component {
4545

4646
### 기본 값 {#default-values}
4747

48-
React 렌더링 생명주기에서 폼 엘리먼트의 `value` 어트리뷰트는 DOM의 value를 대체합니다. 비제어 컴포넌트를 사용하면 React 초깃값을 지정하지만, 그 이후의 업데이트는 제어하지 않는 것이 좋습니다. 이러한 경우에 `value` 어트리뷰트 대신 `defaultValue`를 지정할 수 있습니다.
48+
React 렌더링 생명주기에서 폼 엘리먼트의 `value` 어트리뷰트는 DOM의 value를 대체합니다. 비제어 컴포넌트를 사용하면 React 초깃값을 지정하지만, 그 이후의 업데이트는 제어하지 않는 것이 좋습니다. 이러한 경우에 `value` 어트리뷰트 대신 `defaultValue`를 지정할 수 있습니다. 컴포넌트가 마운트된 후에 `defaultValue` 어트리뷰트를 변경해도 DOM의 값이 업데이트되지 않습니다.
4949

5050
```javascript{7}
5151
render() {

Diff for: src/html.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,8 @@ export default class HTML extends React.Component<Props> {
6565
storageId: 'reactjs_banner_2020survey',
6666
normalHeight: 50,
6767
smallHeight: 75,
68-
campaignStartDate: '2020-10-05Z', // the Z is for UTC
69-
campaignEndDate: '2020-10-19Z', // the Z is for UTC
68+
campaignStartDate: '2020-10-05T00:00:00Z', // the Z is for UTC
69+
campaignEndDate: '2020-10-19T00:00:00Z', // the Z is for UTC
7070
snoozeForDays: 7,
7171
};
7272

0 commit comments

Comments
 (0)