我有几个过滤器,他们是由两个家长使用。两个家长都有应用按钮,我想当它被点击验证函数内的每个过滤器被调用。我该怎么做?
function DateFilter() {
const [isError, setError] = useState(false);
function validation() {
// if not valid show error message and apply button disabled
setError(true);
}
return ...
}
<DesktopDialog onApply={sendBackend}> <-- apply button is there
<DateFilter onChange={setForm}>
</DesktopDialog>
以及
<MobileFilterModal onApply={sendBackend}> <-- apply button is there
<DateFilter onChange={(v) => setForm('date', v)}>
...other filters
</MobileFilterModal>
我听说我们可以使用useImperativeHandle,但是否有其他选项可以使用?
2条答案
按热度按时间k7fdbhmy1#
你必须重新考虑你的组件结构,你试图实现的是React中的反模式,因为数据只能单向流动。
验证应该在你的父组件中进行,
DateFilter
应该只接收它的结果,你可以把这个公共功能提取到一个钩子中。可能有多种方法可以做到这一点,这完全取决于您的应用程序及其体系结构。
x8diyxa72#
如果你说了很多父母的事,正确的方法是lifted state up。例如,你可以用context api
与您的情况类似的用法示例:https://dmitripavlutin.com/react-context-and-usecontext/