如何在没有 lambda 函数的 React Native 中通过单个处理程序处理几个 TextInput?

Posted

技术标签:

【中文标题】如何在没有 lambda 函数的 React Native 中通过单个处理程序处理几个 TextInput?【英文标题】:How to handle a few TextInput by single handler in React Native without lambda function? 【发布时间】:2020-04-10 00:46:41 【问题描述】:

我需要在 React Native 应用程序中通过单个事件处理程序处理一些输入,但不要使用 lambda 函数,因为它在我的应用程序中是被禁止的。使用 lambda 函数,您可以只发送第二个参数,它可能是这样的:

<TextInput
    placeholder = 'email'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = (text) =>  this.handleTwoInputs(text, 'email'); 
    autoCorrect = false
/>
<TextInput
    placeholder = 'name'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = (text) =>  this.handleTwoInputs(text, 'name'); 
    autoCorrect = false
/>
handleTwoInputs = (text, type) => 
  if(type === 'name')
    this.inputName = text;
   else 
   this.inputEmail = text;
 

但是没有 lambda 函数怎么办呢?

【问题讨论】:

jocoders 你有时间检查我上次的编辑吗? 【参考方案1】:

你不需要使用箭头函数:

<TextInput
    placeholder = 'email'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = function(text)  this.handleTwoInputs(text, 'email'); 
    autoCorrect = false
/>

<TextInput
    placeholder = 'name'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = function(text)  this.handleTwoInputs(text, 'name'); 
    autoCorrect = false
/>

编辑:

好的,我想我误解了这个问题。使用onChange 而不是onChangeText,可以实现您想要实现的目标:

<TextInput
    name = 'email_input'
    placeholder = 'email'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = handleTwoInputs
    autoCorrect = false
/>

<TextInput
    name = 'name_input'
    placeholder = 'name'
    onSubmitEditing =Keyboard.dismiss
    onChangeText = handleTwoInputs
    autoCorrect = false
/>

handleTwoInputs = ( nativeEvent ) => 
    const  eventCount, target, text  = nativeEvent

    if (target.name === 'name_input') 
      this.inputName = text;
     else 
      this.inputEmail = text;
  

【讨论】:

非常感谢您的回答,但在我的应用程序中,我使用 MVC 模式,我的逻辑与视图分开,这意味着我不能将 onChangeText 属性内的函数直接放入 TextInput组件,这样做不是好习惯,我可以将处理程序发送到那里 所以你想要的是将相同的处理程序传递给所有输入,但不知何故它们的行为不同。恐怕这是不可能的......让我说这与 MVC 无关,而是与 JS 的工作方式有关。处理程序不是逻辑,它只是您正在使用的匿名函数。最终你将不得不通过第二个参数。也许您创建了一个在内部执行它的自定义输入,但它是相同的。让我在我的答案中添加一些示例,但我想您已经知道了。 你说得对,我没有找到任何解决方案,决定使用 lambda 函数,非常感谢 看看最后一个答案 :) 酷!这就是我需要的!非常感谢你:)))

以上是关于如何在没有 lambda 函数的 React Native 中通过单个处理程序处理几个 TextInput?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 API Gateway 和 React 应用程序之间启用 AWS 中的 CORS 策略?

如何在没有内联代码的情况下使用 lambda 函数部署 cloudformation?

如何创建一个填充了 C 风格函数指针和 lambda 的向量(有和没有捕获)

从 lambda 函数(django)调用 www.googleapis.com:443 时如何修复超时错误 504

Lambda如何使用?

React Hooks 和 jsx-no-lambda 警告