当我在TextField(在 ExerciseSetView 中)内输入字符时,我遇到了问题,我必须重新单击文本框以使其能够输入其他字符。如果我从“文本字段”中删除绑定,则可以流畅地输入文本。
我认为这与我的presenter类和 updateSet 函数重新创建集合实例有关,因为我必须在数组内的两个层次上替换一些值。
import React, { useState, useEffect } from "react";
import {
View,
Text,
ActivityIndicator
} from "react-native";
import { useIsFocused } from "@react-navigation/native";
const TestComp = () => {
const [storageCheck, setStorageCheck] = useState(false);
const [isLoaded, setIsLoaded] = useState(false);
const isFocused = useIsFocused();
useEffect(() => {
const loadData = async() => {
setStorageCheck(true);
setIsLoaded(true);
}
loadData();
}, [isFocused])
return(
<>
{isLoaded ? (
<View>
<Text>some data or texts..</Text>
</View>
) : (
<ActivityIndicator />
)}
</>
)
}
export default TestComp;
答案 0 :(得分:1)
您的代码有一些基本错误。在将此代码投入生产之前,请先研究ObservableObject
和Published
的值。否则,以后很难处理此代码。
我已经更新了您的观点,这似乎可行。您没有使用ObservableObject
,因为应该使用它们。只需传递ObservableObjects
即可让他们为您完成绑定,而无需设置自定义绑定。
struct ExerciseView: View {
@ObservedObject var presenter: WorkoutPresenter
@ObservedObject var exercise: WorkoutExerciseVM
var body: some View {
VStack {
VStack(alignment: .leading) {
ForEach(exercise.sets, id: \.self) { exerciseSet in
ExerciseSetView(set: exerciseSet)
}
}
HStack {
Button(action: {
self.presenter.addSet(id: self.exercise.id)
}) {
HStack {
Image(systemName: "plus")
Text("Add Set")
}
}
Button(action: {
self.presenter.removeSet(id: self.exercise.id)
}) {
HStack {
Image(systemName: "minus")
Text("Remove Set")
}
}
}
}
}
}
struct ExerciseSetView: View {
@ObservedObject var set: WorkoutExerciseSetVM
var body: some View {
HStack {
Spacer()
TextField("", text: $set.reps)
Spacer()
TextField("", text: $set.weight)
}
}
}
让我知道这是否对您有用。