react-native TextInput (IOS) : maxLength & multiline true = onChangeText multiple call

ghhaqwfi  于 3个月前  发布在  React
关注(0)|答案(9)|浏览(51)

描述

我注意到,当我们有 maxLength={number}multiline={true} 时,如果我手动修改状态中的长句子,onChangeText函数会被调用5次,而且,它还会修改初始值。请查看我提供的Snack链接,并亲自查看为setDescription1分配的值以及控制台中的输出值。

重现步骤

  1. 在我在提供的Snack链接中放置的IOS部分上,点击“更改文本”按钮

React Native版本

0.74.1

受影响的平台

运行时-iOS

npx react-native info的输出

System:
  OS: macOS 14.4
  CPU: (8) arm64 Apple M3
  Memory: 448.80 MB / 24.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 21.5.0
    path: /opt/homebrew/opt/node/bin/node
  Yarn:
    version: 1.22.21
    path: /opt/homebrew/bin/yarn
  npm:
    version: 10.2.4
    path: /opt/homebrew/opt/node/bin/npm
  Watchman:
    version: 2023.12.04.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.14.3
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 23.2
      - iOS 17.2
      - macOS 14.2
      - tvOS 17.2
      - visionOS 1.0
      - watchOS 10.2
  Android SDK: Not Found
IDEs:
  Android Studio: Not Found
  Xcode:
    version: 15.2/15C500b
    path: /usr/bin/xcodebuild
Languages:
  Java: Not Found
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli": Not Found
  react:
    installed: 18.2.0
    wanted: 18.2.0
  react-native:
    installed: 0.73.1
    wanted: 0.73.1
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: false
iOS:
  hermesEnabled: true
  newArchEnabled: false

堆栈跟踪或日志

Before :

In the Shadow of Young Girls in Flowers, published in 1913, second volume of In Search of Lost Time, won the Goncourt Prize in 1919. For Marcel Proust (1871-1922), it was the rebirth of a work

After :

In the SIn the Shadow of Young Girls in Flowers, published in 1913, second volume of In Search of Lost Time, won the Goncourt Prize in 1919. For Marcel Proust (1871-1922), it was the rebirth of a work

可复现代码

reproducer-template
snack

vmjh9lq9

vmjh9lq91#

⚠️React Native的新版本可用!
i️您正在使用受支持的次要版本,但似乎有一个更新的补丁可用 - 0.73.8。请升级到您次要版本的最高补丁或最新版本,并验证问题是否仍然存在(或者,创建一个新项目并在其中重现问题)。如果无法重现,请告知我们,以便我们关闭此问题。这有助于确保我们关注仍在最近版本中存在的问题。
mqxuamgl

mqxuamgl2#

在react-native 0.72.13中,多行文本存在相同的问题。

1qczuiv0

1qczuiv03#

非常烦人的bug。你可以查看这个主题:#36494。我猜它也是一样的,对于这个问题有一些解决方法。

fslejnso

fslejnso4#

非常烦人的bug。你可以查看这个主题:#36494。我猜它是一样的,对于这个问题有一些解决方法。
是的,我已经看到这个问题了,因为它已经关闭了,所以我重新打开了这个主题,因为问题仍然存在。

aiqt4smr

aiqt4smr5#

@mlcpro 无法在最新版本上复现问题。请使用最新版本进行验证,并提供一个从 reproducer-template 创建的可复现应用程序?

rpppsulh

rpppsulh6#

@mlcpro 无法在最新版本上复现问题。请使用最新版本进行验证,并提供一个从 reproducer-template 创建的可复现应用程序?
@kunalchavhan 当然,我刚刚进行了测试,我确认在最新版本(0.74.2)中仍然存在这个问题,please see reproducer template

mbyulnm0

mbyulnm07#

感谢mlcpro提供复现工具。问题显然已经得到复现。

fjnneemd

fjnneemd8#

@mlcpro@cortinico While debugging the issue i found , in the below code snippet onChangeText callback never gets called if i am changing input via state in Fabric new arch , before providing the solution for old-arch i want to confirm if this is the expected behaviour in Fabric.
<View style={styles.input}> <Button onPress={() => setDescription1('HelloWorld')} title="Change text" /> <TextInput multiline={true} maxLength={18} value={description1} onChangeText={(text) => { console.log(text); setDescription1(text); }} /> </View>

mfuanj7w

mfuanj7w9#

我遇到了相同的问题,值被错误修改的部分让我非常头疼。
例如,在我的案例中,我有 maxLength={8} ,如果我输入 "Abcde" ,然后以编程方式将状态设置为空字符串并导航到另一个屏幕;然后返回到屏幕并再次以编程方式将状态设置为 "Abcde" ,文本输入将错误地渲染字符串 "AbcAbcde"
各位有什么替代解决方案吗?提前感谢!

相关问题