在父类传递的事件处理程序中有条件地更新子组件的状态

系列休闲
const Child = (props) => {
  const [val, setVal] = useState(props.val);

  const handleCreate = (newData) => new Promise((resolve, reject) => {
        setTimeout(() => {
            {
                const transactions = JSON.parse(JSON.stringify(tableData));
                const clean_transaction = getCleanTransaction(newData);
                const db_transaction = convertToDbInterface(clean_transaction);
                transactions.push(clean_transaction);
// The below code makes post-request to 2 APIs synchronously and conditionally updates the child-state if calls are successful.
                **categoryPostRequest(clean_transaction)
                    .then(category_res => {
                        console.log('cat-add-res:', category_res);
                        transactionPostRequest(clean_transaction)
                            .then(transaction_res => {
                                addToast('Added successfully', { appearance: 'success'});
                                **setVal(transactions)**
                            }).catch(tr_err => {
                            addToast(tr_err.message, {appearance: 'error'});
                        })
                    }).catch(category_err => {
                    console.log(category_err);
                    addToast(category_err.message, {appearance: 'error'})
                });**
            }
            resolve()
        }, 1000)
    });

  return (
    <MaterialTable
            title={props.title}
            data={val}
            editable={{
                onRowAdd: handleCreate
            }}
        />
  );
}

const Parent = (props) => {
  // some other stuff to generate val
  return (
    <Child val={val}/>
  );
}

我正在努力做到这一点:我想将handleCreate(粗体部分)中函数的请求后部分移到可以由Child类调用的Parent组件上。想法是使Component抽象并可由其他类似的Parent-class重用。

TJ人群

在父级中创建函数,然后在props中将其传递给子级:

const Parent = (props) => {
  // The handler
  const onCreate = /*...*/;

  // some other stuff
  return (
    <Child ...props onCreate={onCreate}/>
  );
}

然后让子进程使用所需的任何参数调用函数(在您的示例中似乎没有任何参数,例如您没有val在其中使用):

return (
  <MaterialTable
          title={props.title}
          data={val}
          editable={{
              onRowAdd: props.onCreate // Or `onRowAdd: () => props.onCreate(parameters, go, here)`
          }}
      />
);

注意:没有必要复制props.valval子组件内的state成员props.val

旁注2:使用道具通常可以方便地进行破坏:

const Child = ({val, onCreate}) => {
  // ...
};

旁注3:您的Parent组件Child可以通过以下方式调用所有道具...props

return (
  <Child ...props onCreate={onCreate}/>
);

通常那不是最好的。Child在这种情况下,仅传递实际需要的内容,valonCreate

return (
  <Child val={props.val} onCreate={onCreate}/>
);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在无状态组件中有条件地更新状态?

来自分类Dev

如何在useEffect中更新状态的条件组件中有条件地渲染?

来自分类Dev

如何在React中有条件地将子组件添加到父组件?

来自分类Dev

在 React 组件中有条件地渲染 <td>

来自分类Dev

在React中有条件地设置活动类

来自分类Dev

在React中有条件地设置活动类

来自分类Dev

流星-有条件地返回一组事件处理程序

来自分类Dev

反应:无法有条件地更新状态

来自分类Dev

有条件地运行 ansible 角色处理程序

来自分类Dev

React Hooks,在onClick函数中有条件地更改状态,在下次单击时更新

来自分类Dev

基于状态在React JS中有条件地渲染内容

来自分类Dev

在React JSX中有条件地渲染组件部分

来自分类Dev

如何在React中有条件地将布局应用于组件

来自分类Dev

如何在redux-form的<Field>中有条件地渲染组件

来自分类Dev

在 Reactjs 组件中有条件地呈现来自 API 响应的内容

来自分类Dev

将T作为参数传递给在Java中有条件地创建Generic的对象

来自分类Dev

有条件地将类添加到父类

来自分类Dev

在MongoDB中有条件地应用和条件

来自分类Dev

在Laravel中有条件地包括子视图的正确方法

来自分类Dev

从字符串中有条件地提取子字符串

来自分类Dev

如何在Aurelia repeat.for中有条件地添加或删除CSS类?

来自分类Dev

在Angular2中有条件地分配类

来自分类Dev

如何在Ember中有条件地应用CSS类?

来自分类Dev

如何在angularjs中有条件地应用css类

来自分类Dev

如何在.net中有条件地继承类

来自分类Dev

在Angular2中有条件地应用CSS类

来自分类Dev

如何在For循环中有条件地更新多个类别的值

来自分类Dev

根据React功能组件中的状态变量有条件地设置className

来自分类Dev

有条件地更改同一父级中的子级元素

Related 相关文章

  1. 1

    如何在无状态组件中有条件地更新状态?

  2. 2

    如何在useEffect中更新状态的条件组件中有条件地渲染?

  3. 3

    如何在React中有条件地将子组件添加到父组件?

  4. 4

    在 React 组件中有条件地渲染 <td>

  5. 5

    在React中有条件地设置活动类

  6. 6

    在React中有条件地设置活动类

  7. 7

    流星-有条件地返回一组事件处理程序

  8. 8

    反应:无法有条件地更新状态

  9. 9

    有条件地运行 ansible 角色处理程序

  10. 10

    React Hooks,在onClick函数中有条件地更改状态,在下次单击时更新

  11. 11

    基于状态在React JS中有条件地渲染内容

  12. 12

    在React JSX中有条件地渲染组件部分

  13. 13

    如何在React中有条件地将布局应用于组件

  14. 14

    如何在redux-form的<Field>中有条件地渲染组件

  15. 15

    在 Reactjs 组件中有条件地呈现来自 API 响应的内容

  16. 16

    将T作为参数传递给在Java中有条件地创建Generic的对象

  17. 17

    有条件地将类添加到父类

  18. 18

    在MongoDB中有条件地应用和条件

  19. 19

    在Laravel中有条件地包括子视图的正确方法

  20. 20

    从字符串中有条件地提取子字符串

  21. 21

    如何在Aurelia repeat.for中有条件地添加或删除CSS类?

  22. 22

    在Angular2中有条件地分配类

  23. 23

    如何在Ember中有条件地应用CSS类?

  24. 24

    如何在angularjs中有条件地应用css类

  25. 25

    如何在.net中有条件地继承类

  26. 26

    在Angular2中有条件地应用CSS类

  27. 27

    如何在For循环中有条件地更新多个类别的值

  28. 28

    根据React功能组件中的状态变量有条件地设置className

  29. 29

    有条件地更改同一父级中的子级元素

热门标签

归档