组件原则
减少组件之间的耦合性,让组件简单,容易理解,原则
- 保持接口小,porps数量要少
- 根据边界划分组件,充分利用组合 composition
- 按照数据划分边界原则
- 用 propTypes来定义组件的 props
- 避免 renderXXX的内部函数
- 把 state往父组件提取,让下层组件实现为纯函数
- 有状态的组件,组件有自己的 state
- 如何判断组件是否有自己的 state??
- 假设组件没有 state,定义为函数形式的无状态组件
- state是组件内部状态,只能通过组件自己来更新
- 确定了组件结构和 state后,剩下的就是 props设计
- 不大可能一次就写出完美的代码,软件开发是个逐渐精进的过程,应该让组件达到这样的要求
- 功能正常
- 代码整洁
- 高性能
有状态组件
react组件就是软件设计中的模块
- 一个组件就是一个独立的文件,然后用 export default 导出这个组件
- 任何 jsx都需要
import React from 'react' - 有状态的组件 state,不能用 函数组件
- state需要初始化
秒表组件
- 组件框架
```jsx
// 父组件:容器组件
class StopWatch extends React.PureComponent {
render() {
} }return (<><MajorClock /><ControllerButton /><SplitTimes /></>)
// 子组件 const MajorClock = (props) => { // 返回秒表的 jsx }
const ControllerButton = (props) => { // 返回2个按钮 }
const SplitTimes = (props) => { // 返回计次所有的时间;要用一个数组来存放时间 }
2. 组件代码```jsx// 父组件class StopWatch extends React.PureComponent {render() {return (<MajorClock /><ControllerButton /><SplitTimes />)}}// 子组件const MajorClock = (props) => {// 返回秒表的 jsxconst { milliseconed=0 } = propsreutrn (<h1>{ ms2Time(millisecond) }</h1>)}MajorClock.propTypes = {milliseconds: PropTypes.number.isRequired}// 返回2个按钮const ControllerButton = (props) => {const { actived, onStart, onReset, onPause, onSplit } = props// actived true 返回计次和停止if (actived) {return (<div><Button onClick={onSplit}>计次</Button><Button onClick={onPause}>停止</Button></div>)}// actived false 返回复位和启动return (<div><Button onClick={onReset}>复位</Button><Button onClick={onStart}>启动</Button></div>)}ControllerButton.propTypes = {actived: PropTypes.bool,onStart: PropTypes.func.isRequired,onPause: PropTypes.func.isRequired,onSplit: PropTypes.func.isRequired,onReset: PropTypes.func.isRequired,}// 返回计次所有的时间;要用一个数组来存放时间const SplitTimes = (props) => {}SplitTimes.propTypes = {splits: PropTypes.arrayOf(PropTypes.number)}
ms2Time
// ms2Timeexport const ms2Time = millisecond => {let time = millisecond// 毫秒const ms = time % 1000time = (milliseconds - ms) / 1000// 秒const seconds = time % 60time = (time - seconds) / 60// 小时const minutes = time % 60const hours = (time - minutes) / 60// 时 分 秒const fulltime = padStart(hour, 2, '0') + ':' + padStart(minutes,2 '0') + ':' + padStart(seconds, 3, '0')}
