render props 重用的业务逻辑自己不产生任何 UI

    • render props 就是把一个 render 函数作为属性传递给某个组件,由这个组件去执行这个函数从而 render 实际的内容
    • 如果有 UI 展示的逻辑需要重用,我们还是必须借助于 render props 的逻辑,这就是必须要掌握 render props 设计模式

    计数器案例

    1. import { useState, useCallback } from "react";
    2. function CounterRenderProps({ children }) {
    3. const [count, setCount] = useState(0);
    4. const increment = useCallback(() => {
    5. setCount(count + 1);
    6. }, [count]);
    7. const decrement = useCallback(() => {
    8. setCount(count - 1);
    9. }, [count]);
    10. return children({ count, increment, decrement });
    11. }

    把计数逻辑封装到一个自己不 render 任何 UI 的组件,使用 render props

    1. function CounterRenderPropsExample() {
    2. return (
    3. <CounterRenderProps>
    4. {({ count, increment, decrement }) => {
    5. return (
    6. <div>
    7. <button onClick={decrement}>-</button>
    8. <span>{count}</span>
    9. <button onClick={increment}>+</button>
    10. </div>
    11. );
    12. }}
    13. </CounterRenderProps>
    14. );
    15. }