|
344 | 344 | * 考虑到真实的 DOM 操作成本很高,它使用 VirtualDOM 而不是真实的 DOM。
|
345 | 345 | * 支持服务端渲染。
|
346 | 346 | * 遵循单向数据流或数据绑定。
|
347 |
| - * 使用可重用/可组合的 UI 组件开发视图。 |
| 347 | + * 使用可复用/可组合的 UI 组件开发视图。 |
348 | 348 |
|
349 | 349 | 3. ### 什么是 JSX?
|
350 | 350 |
|
|
455 | 455 |
|
456 | 456 | 7. ### 什么是 Pure Components?
|
457 | 457 |
|
458 |
| - `React.PureComponent` 与 `React.Component` 完全相同,只是它为你处理了 `shouldComponentUpdate()` 方法。当属性或状态发生变化时,PureComponent 将对属性和状态进行浅比较。另一方面,普通组件不会将当前的属性和状态与新的属性和状态进行比较。因此,在默认情况下,每当调用 `shouldComponentUpdate` 时,组件将重新渲染。 |
| 458 | + `React.PureComponent` 与 `React.Component` 完全相同,只是它为你处理了 `shouldComponentUpdate()` 方法。当属性或状态发生变化时,PureComponent 将对属性和状态进行**浅比较**。另一方面,一般的组件不会将当前的属性和状态与新的属性和状态进行比较。因此,在默认情况下,每当调用 `shouldComponentUpdate` 时,默认返回 true,所以组件都将重新渲染。 |
459 | 459 |
|
460 | 460 | 8. ### React 的状态是什么?
|
461 | 461 |
|
|
524 | 524 |
|
525 | 525 | 11. ### 我们为什么不能直接更新状态?
|
526 | 526 |
|
527 |
| - 如果你尝试直接更新状态,则不会重新渲染组件? |
| 527 | + 如果你尝试直接改变状态,那么组件将不会重新渲染。 |
528 | 528 |
|
529 | 529 | ```javascript
|
530 | 530 | //Wrong
|
531 | 531 | this.state.message = 'Hello world'
|
532 | 532 | ```
|
533 | 533 |
|
534 |
| - 而是使用 `setState()` 方法。它调度组件状态对象的更新。当状态更改时,组件通过重新渲染来响应。 |
| 534 | + 正确方法应该是使用 `setState()` 方法。它调度组件状态对象的更新。当状态更改时,组件通将会重新渲染。 |
535 | 535 |
|
536 | 536 | ```javascript
|
537 | 537 | //Correct
|
|
661 | 661 | </h2>
|
662 | 662 | }
|
663 | 663 | ```
|
| 664 | + |
| 665 | + 当然如果只是想判断 if,可以如下直接判断: |
| 666 | + |
| 667 | + ``` |
| 668 | + { |
| 669 | + isLogin && <span>Your have been login!</span> |
| 670 | + } |
| 671 | + ``` |
| 672 | + |
| 673 | + 在上面的代码中,不需要使用`isLogin ? <span>Your have been login!</span> : null`这样的形式。 |
664 | 674 |
|
665 | 675 | 18. ### 什么是 "key" 属性,在元素数组中使用它们有什么好处?
|
666 | 676 |
|
|
1171 | 1181 | return <span className={'menu navigation-menu'}>{'Menu'}</span>
|
1172 | 1182 | }
|
1173 | 1183 | ```
|
| 1184 | + |
| 1185 | + 在实际项目中,我们经常使用[classnames](https://github.com/JedWatson/classnames)来方便我们操作`className`。 |
1174 | 1186 |
|
1175 | 1187 | 46. ### 什么是 Fragments ?
|
1176 | 1188 |
|
|
1188 | 1200 | }
|
1189 | 1201 | ```
|
1190 | 1202 |
|
1191 |
| - 以下是简介语法,但是在一些工具中还不支持: |
| 1203 | + 以下是简洁语法,但是在一些工具中还不支持: |
1192 | 1204 |
|
1193 | 1205 | ```jsx
|
1194 | 1206 | render() {
|
|
1297 | 1309 | 2. 对于 Web 开发初学者来说,有一个学习曲线。
|
1298 | 1310 | 3. 将 React 集成到传统的 MVC 框架中需要一些额外的配置。
|
1299 | 1311 | 4. 代码复杂性随着内联模板和 JSX 的增加而增加。
|
1300 |
| - 5. 太多较小的组件导致过度工程化或样板文件。 |
1301 |
| - 5. Too many smaller components leading to over engineering or boilerplate. |
| 1312 | + 5. 如果有太多的小组件可能增加项目的庞大和复杂。 |
1302 | 1313 |
|
1303 | 1314 | 54. ### 在 React v16 中的错误边界是什么?
|
1304 | 1315 |
|
|
2030 | 2041 |
|
2031 | 2042 | 94. ### 什么是 React proptype 数组?
|
2032 | 2043 |
|
2033 |
| - 如果要将对象数组传递给具有特定形状的组件,请使用 `React.PropTypes.shape()` 作为 `React.PropTypes.arrayOf()` 的参数。 |
| 2044 | + 如果你要规范具有特定对象格式的数组的属性,请使用 `React.PropTypes.shape()` 作为 `React.PropTypes.arrayOf()` 的参数。 |
2034 | 2045 |
|
2035 | 2046 | ```javascript
|
2036 | 2047 | ReactComponent.propTypes = {
|
|
2275 | 2286 |
|
2276 | 2287 | 109. ### 为什么函数比对象更适合于 `setState()`?
|
2277 | 2288 |
|
2278 |
| - React may batch multiple `setState()` calls into a single update for performance. Because `this.props` and `this.state` may be updated asynchronously, you should not rely on their values for calculating the next state. |
2279 | 2289 | 出于性能考虑,React 可能将多个 `setState()` 调用合并成单个更新。这是因为我们可以异步更新 `this.props` 和 `this.state`,所以不应该依赖它们的值来计算下一个状态。
|
2280 | 2290 |
|
2281 | 2291 | 以下的 counter 示例将无法按预期更新:
|
|
2609 | 2619 |
|
2610 | 2620 | 129. ### 什么是 React Router?
|
2611 | 2621 |
|
2612 |
| - React Router 是一个基于 React 的强大的路由库,可以帮助您快速地向应用添加新的屏幕和流,同时保持 URL 与页面上显示的内容同步。 |
| 2622 | + React Router 是一个基于 React 之上的强大路由库,可以帮助您快速地向应用添加视图和数据流,同时保持 UI 与 URL 同步。 |
2613 | 2623 |
|
2614 | 2624 | 130. ### React Router 与 history 库的区别?
|
2615 | 2625 |
|
|
0 commit comments