描述
我注意到,当我们有 maxLength={number} 和 multiline={true} 时,如果我手动修改状态中的长句子,onChangeText函数会被调用5次,而且,它还会修改初始值。请查看我提供的Snack链接,并亲自查看为setDescription1分配的值以及控制台中的输出值。
重现步骤
- 在我在提供的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
9条答案
按热度按时间vmjh9lq91#
mqxuamgl2#
在react-native 0.72.13中,多行文本存在相同的问题。
1qczuiv03#
非常烦人的bug。你可以查看这个主题:#36494。我猜它也是一样的,对于这个问题有一些解决方法。
fslejnso4#
非常烦人的bug。你可以查看这个主题:#36494。我猜它是一样的,对于这个问题有一些解决方法。
是的,我已经看到这个问题了,因为它已经关闭了,所以我重新打开了这个主题,因为问题仍然存在。
aiqt4smr5#
@mlcpro 无法在最新版本上复现问题。请使用最新版本进行验证,并提供一个从 reproducer-template 创建的可复现应用程序?
rpppsulh6#
@mlcpro 无法在最新版本上复现问题。请使用最新版本进行验证,并提供一个从 reproducer-template 创建的可复现应用程序?
@kunalchavhan 当然,我刚刚进行了测试,我确认在最新版本(0.74.2)中仍然存在这个问题,please see reproducer template
mbyulnm07#
感谢mlcpro提供复现工具。问题显然已经得到复现。
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>
mfuanj7w9#
我遇到了相同的问题,值被错误修改的部分让我非常头疼。
例如,在我的案例中,我有
maxLength={8}
,如果我输入"Abcde"
,然后以编程方式将状态设置为空字符串并导航到另一个屏幕;然后返回到屏幕并再次以编程方式将状态设置为"Abcde"
,文本输入将错误地渲染字符串 "AbcAbcde"各位有什么替代解决方案吗?提前感谢!