React 推崇函数式组件(Function Components),并不是“为了函数而函数”,而是因为函数在构建 UI 这套问题域里,有天然的优势。可以从几个层面理解。
一个组件的理想定义是:
给定 props(和 state),返回 UI(React 元素)
这正好就是一个纯函数的特征:
function UserCard({ name, age }) {
return <div>{name} - {age}</div>
}
函数天然适合表达这种“映射关系”。
在 Hooks 出现之前,只能用类组件:
class UserCard extends React.Component {
state = { count: 0 }
handleClick = () => {
this.setState({ count: this.state.count + 1 })
}
render() {
return <button onClick={this.handleClick}>{this.state.count}</button>
}
}
问题很多:
this 很烦比如“订阅数据”:
componentDidMount 订阅componentWillUnmount 取消同一个功能被拆得到处都是。
function Counter() {
const [count, setCount] = useState(0)
return <button onClick={() => setCount(count + 1)}>{count}</button>
}
thisfunction useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth)
useEffect(() => {
const onResize = () => setWidth(window.innerWidth)
window.addEventListener('resize', onResize)
return () => window.removeEventListener('resize', onResize)
}, [])
return width
}
function App() {
const width = useWindowWidth()
return <div>{width}</div>
}
逻辑复用 = 函数调用,而不是组件嵌套。
函数式组件强调:
UI 是状态的函数
UI = f(state)
而不是:
我一步步操作 DOM
thisReact 用函数式组件,是因为 UI 本质上是“状态到视图的映射”,而函数正是表达映射最自然、最简单、最可组合的方式。
如果你愿意,我也可以:
你可以直接说想看哪一个。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。