reactjs 子组件有很多父组件,父组件想访问它的方法,我该怎么做?

1l5u6lss  于 2023-02-15  发布在  React
关注(0)|答案(2)|浏览(131)

我有几个过滤器,他们是由两个家长使用。两个家长都有应用按钮,我想当它被点击验证函数内的每个过滤器被调用。我该怎么做?

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,但是否有其他选项可以使用?

k7fdbhmy

k7fdbhmy1#

你必须重新考虑你的组件结构,你试图实现的是React中的反模式,因为数据只能单向流动。
验证应该在你的父组件中进行,DateFilter应该只接收它的结果,你可以把这个公共功能提取到一个钩子中。
可能有多种方法可以做到这一点,这完全取决于您的应用程序及其体系结构。

x8diyxa7

x8diyxa72#

如果你说了很多父母的事,正确的方法是lifted state up。例如,你可以用context api
与您的情况类似的用法示例:https://dmitripavlutin.com/react-context-and-usecontext/

相关问题