方式一

子组件 watch 某属性的变动。

复杂点的情况,父组件要拿子组件函数调用的返回值。父组件要额外传个回调,在函数调用后,调用那回调。
流程图 todo
代码todo

方式二

父组件传入一个对象做为调用子组件方法的代理对象。子组件和该对象产生关联关系。类似 ant design 的 Form 的写法。

  1. import { Form } from 'antd'
  2. const [form] = Form.useForm();
  3. // 触发验证
  4. form.validateFields()
  5. <Form form={form}>...</Form>

子组件里可能的实现是这样的:

  1. ({form}) => {
  2. const validateFields = ...
  3. useEffect(() => {
  4. // 绑定关联关系
  5. form.init(validateFields)
  6. }, [form])
  7. }

form 里面可能这么写

  1. class Form {
  2. init(validateFields) {
  3. this.doValidateFields = validateFields
  4. }
  5. validateFields () {
  6. this.doValidateFields?.()
  7. }
  8. }