【问题标题】:How do I pass a boolean value from my React child to parent component如何将布尔值从我的 React 子组件传递给父组件
【发布时间】:2021-10-29 21:15:46
【问题描述】:

在我的 React 子组件中,我可以访问一个变量 options,它返回一个对象数组。

在这个组件中,我有一个检查是否有选项的函数:

const hasOptions = () => options.length > 0;

console.log(hasOptions());

这将返回 truefalse

在我的父组件中,我需要这个布尔值来有条件地添加一些样式(基于布尔值)。

如何将这个布尔值从我的子组件传递给父组件?

【问题讨论】:

标签: javascript reactjs react-functional-component


【解决方案1】:

可以在父组件中创建状态变量,然后将setXXX方法传递给子组件,在子组件中调用setXXX方法将布尔变量传递给父组件。

【讨论】:

    【解决方案2】:

    如果可能,让父母访问options 并让它向孩子提供hasOptions,而不是反过来做。如果可能,状态应为“lifted up”组件层次结构(从子级到父级)。

    如果不可能,你必须让父母为孩子提供一个功能(作为道具),然后它可以用来告诉父母它是否有选项。这更复杂,并且可能导致不必要的渲染(例如,父级在没有附加样式的情况下渲染子级,子级调用父级,父级必须使用附加样式重新渲染)。

    【讨论】:

      【解决方案3】:

      一般来说,您不应该这样做。 React 基于单向数据流的思想。数据向下流动,从父级到子级,反之亦然。 所以正确的解决方案是将状态提升到父组件并将其传递给子组件。 但是如果你绝对需要这样做,你可以将回调传递给孩子。

      function Parent() {
        const [hasOptions, setHasOptions] = useState(false);
      
        return <Child setHasOptions={setHasOptions} />
      }
      
      function Child({ setHasOptions }) {
        useEffect(() => {
          setHasOptions(hasOptions())
        }, [options.length, setHasOptions ]);
      
        // ...
      }
      

      【讨论】:

        猜你喜欢
        • 2019-07-24
        • 1970-01-01
        • 2017-08-16
        • 2020-02-04
        • 1970-01-01
        • 2022-07-15
        • 1970-01-01
        • 2018-12-28
        • 2020-03-30
        相关资源
        最近更新 更多