如何将布尔值从我的 React 子组件传递到父组件
How do I pass a boolean value from my React child to parent component
在我的 React 子组件中,我可以访问一个变量 options
,其中 returns 一个对象数组。
在这个组件中,我有一个检查是否有选项的函数:
const hasOptions = () => options.length > 0;
console.log(hasOptions());
这个 returns true
或 false
.
在我的父组件中,我需要这个布尔值来有条件地添加一些样式(基于布尔值)。
如何将此布尔值从我的子组件传递到父组件?
可以在parent组件中创建状态变量,然后将setXXX
方法传递给child组件,在child组件中调用setXXX
方法将布尔变量传递给 parent.
如果可能,让父级访问 options
并让它向子级提供 hasOptions
,而不是相反。如果可能,状态应该是“lifted up”组件层次结构(从子级到父级)。
如果不可能,您必须让父级向子级提供一个函数(作为道具),然后它可以用来告诉父级它是否有选项。这更复杂并且可能导致不必要的渲染(例如,父级在没有附加样式的情况下渲染子级,子级调用父级,而父级必须使用附加样式重新渲染)。
一般来说你不应该那样做。 React 基于单向数据流的思想。数据向下流动,从 parent 到 children,事件则相反。
所以正确的解决方案是将状态提升到 parent 组件并将其传递给 children。
但如果你绝对需要这样做,你可以将回调传递给 child.
function Parent() {
const [hasOptions, setHasOptions] = useState(false);
return <Child setHasOptions={setHasOptions} />
}
function Child({ setHasOptions }) {
useEffect(() => {
setHasOptions(hasOptions())
}, [options.length, setHasOptions ]);
// ...
}
在我的 React 子组件中,我可以访问一个变量 options
,其中 returns 一个对象数组。
在这个组件中,我有一个检查是否有选项的函数:
const hasOptions = () => options.length > 0;
console.log(hasOptions());
这个 returns true
或 false
.
在我的父组件中,我需要这个布尔值来有条件地添加一些样式(基于布尔值)。
如何将此布尔值从我的子组件传递到父组件?
可以在parent组件中创建状态变量,然后将setXXX
方法传递给child组件,在child组件中调用setXXX
方法将布尔变量传递给 parent.
如果可能,让父级访问 options
并让它向子级提供 hasOptions
,而不是相反。如果可能,状态应该是“lifted up”组件层次结构(从子级到父级)。
如果不可能,您必须让父级向子级提供一个函数(作为道具),然后它可以用来告诉父级它是否有选项。这更复杂并且可能导致不必要的渲染(例如,父级在没有附加样式的情况下渲染子级,子级调用父级,而父级必须使用附加样式重新渲染)。
一般来说你不应该那样做。 React 基于单向数据流的思想。数据向下流动,从 parent 到 children,事件则相反。 所以正确的解决方案是将状态提升到 parent 组件并将其传递给 children。 但如果你绝对需要这样做,你可以将回调传递给 child.
function Parent() {
const [hasOptions, setHasOptions] = useState(false);
return <Child setHasOptions={setHasOptions} />
}
function Child({ setHasOptions }) {
useEffect(() => {
setHasOptions(hasOptions())
}, [options.length, setHasOptions ]);
// ...
}