React 组件开发

28
REACT 从到实践 组件开发

Transcript of React 组件开发

Page 1: React 组件开发

REACT 从⼊入⻔门到实践组件开发

Page 2: React 组件开发

主要内容

• 参考 Thinking in React 开发 Filter Table

• 拆分组件的规则

• props 和 state 的最佳实践

• 单向数据流是如何构建的

Page 3: React 组件开发

Filter Table

• 具有搜索功能的产品表格⻚页

• 设计稿和接⼝口⽂文档已经给出

Page 4: React 组件开发

• 需要实现的效果

Filter Table

Page 5: React 组件开发

第⼀一步:按层级拆分组件

• 单⼀一职责原则

• UI 和组件层级对应

Page 6: React 组件开发

第⼆二步:开发静态版本

• 不⽤用 state,只⽤用 props

• 数据放在最顶层的组件中

• 构建应⽤用的顺序

Page 7: React 组件开发

第⼆二步:开发静态版本

Page 8: React 组件开发

第⼆二步:开发静态版本

Page 9: React 组件开发

第⼆二步:开发静态版本

Page 10: React 组件开发

第⼆二步:开发静态版本

Page 11: React 组件开发

第⼆二步:开发静态版本

Page 12: React 组件开发

第⼆二步:开发静态版本

Page 13: React 组件开发

第三步:分析需要的最少量(但是完备)state

• 状态越少越好维护

• ⽐比如 TodoList 显⽰示总条数

Page 14: React 组件开发

第三步:分析需要的最少量(但是完备)state

• 原始产品数组

• ⽤用户输⼊入的关键字

• 复选框的状态

• 过滤之后的产品数组

Page 15: React 组件开发

第三步:分析需要的最少量(但是完备)state

• 它是从⽗父级传过来的吗?

• 它会经常改变吗?

• 它能通过其他 `state` 和 `props` 计算出来吗?

Page 16: React 组件开发

第三步:分析需要的最少量(但是完备)state

• 如果它是从⽗父级传过来的,那么它就不是⼀一个 state

• 如果它会经常改变,那么它应该是⼀一个 state

• 如果它能通过其他 state 和 props 计算出来,那么它不是⼀一个 state

Page 17: React 组件开发

• 原始 products 列表

• ⽤用户输⼊入的搜索词

• 复选框的值

• 过滤后的 products 列表

第三步:分析需要的最少量(但是完备)state

Page 18: React 组件开发

第四步:分析 state 应该属于哪个组件

• 最具有挑战性的⼀一步

Page 19: React 组件开发

第四步:分析 state 应该属于哪个组件

• 找到所有需要⽤用到这个 state 的组件

• 找到他们的公共祖先组件

• 此组件或者它的祖先组件应该拥有这个 state

• 如果找不到合适的,可以创建⼀一个新的组件,它包含了所有⽤用到这个 state 的组件

Page 20: React 组件开发

第四步:分析 state 应该属于哪个组件

• FilterableProductTable 需要⽤用到 state 来展⽰示过滤后的产品

• SearchBar 需要⽤用到 state 来展⽰示搜索内容和复选框状态

• 它们的共同祖先组件是 FilterableProductTable

Page 21: React 组件开发

第四步:分析 state 应该属于哪个组件

Page 22: React 组件开发

第四步:分析 state 应该属于哪个组件

Page 23: React 组件开发

第四步:分析 state 应该属于哪个组件

Page 24: React 组件开发

第四步:分析 state 应该属于哪个组件

Page 25: React 组件开发

第五步:构建反向数据流

• 将搜索框和复选框的改变通知给 FilterableProductTable

• ⼦子组件 -> ⽗父组件 -> ⼦子组件

Page 26: React 组件开发

第五步:构建反向数据流

Page 27: React 组件开发

第五步:构建反向数据流

Page 28: React 组件开发

总结

• 按层级划分组件

• state 最好尽可能少(但是需要完备)

• 理解单向数据流的含义,以及如何应⽤用