【问题标题】:JSX props should not use arrow functions eslint warning [duplicate]JSX 道具不应使用箭头函数 eslint 警告 [重复]
【发布时间】:2021-05-14 07:45:52
【问题描述】:

我有两个组件,一个将一些 func 作为 prop 传递给另一个组件,我不确定在不必收到 eslint 错误的情况下执行此操作的正确方法是什么:

代码:

<Parent>
  const doSmthHandler = useCallback((id: number)=> {
   //do some stuff 
  },[])
  <ComponentB>
     doSmth={()=>doSmthHandler(id)} // Here I get eslint warning: JSX props should not use arrow functions eslint warning
  </ComponentB>
</Parent>

组件 B 接收 doSmth 属性作为函数,并有一个按钮,例如:

<Button onPress={doSmth}>Do stuff</Button>

我想知道如何将一些参数传递给作为 cb 道具传递给另一个我没有得到 eslint 错误的组件!

【问题讨论】:

  • 你试过 React 钩子 useCallback 吗?你可以找到它的文档here
  • 我实际上已经在 callBack() 下,但警告仍然显示!
  • 从上面的链接中看不到任何示例如何将 arg 传递给 func 而不必使用内联箭头 fn
  • @isnihalsi 问题是您将回调直接作为属性传递。您应该在将其传递给组件之前声明它以避免 ESLint 警告。

标签: javascript reactjs react-native


【解决方案1】:

您的代码的问题在于您将回调作为属性直接传递。在将其传递给组件之前,您可以使用 useCallback 将其声明为包装器,如下所示:

const doSmthHandlerWrapper = useCallback(
    () => doSmthHandler(id),
    [id]
)

<ComponentB>
    doSmth={doSmthHandlerWrapper}
</ComponentB>

【讨论】:

  • 如何在 doSmthHandlerWrapper 中传递id
  • 您是否在组件上声明了id(示例代码中为Parent)?如果是这样,它应该在调用时通过闭包对函数可见。
  • 不,其实这是这里的重点,我想传递一个arg给doSmthHandlerWrapper() for ex doSmthHandlerWrapper(1)
  • 你能提供一个更广泛的代码版本的 sn-p,显示你想要做什么吗?
  • 看来我可以像
猜你喜欢
  • 2019-01-10
  • 2018-11-24
  • 2017-05-25
  • 2023-03-12
  • 2021-06-15
  • 2017-09-13
  • 2020-07-30
  • 2018-10-07
相关资源
最近更新 更多