javascript - 当 Tab 更改时,React Native TextInput 值保持不变
问题描述
我在最新的 react native 中遇到了一个奇怪的问题,当切换选项卡时,组件中文本输入中的值仍然存在。
我不知道发生了什么,我认为它应该在标签更改时重新渲染,但事实并非如此。
这是我的代码 app.js
export default function App() {
const [tab, setTab] = useState("TAB1")
return (
<View style={styles.container}>
<View style={{ flexDirection: 'row' }}>
<TouchableOpacity
style={{ borderRadius: 5, borderWidth: 1, marginRight: 5, padding: 20 }}
onPress={() => setTab("TAB1")}
>
<Text>Tab 1</Text>
</TouchableOpacity>
<TouchableOpacity
style={{ borderRadius: 5, borderWidth: 1, padding: 20}}
onPress={() => setTab("TAB2")}
>
<Text>Tab 2</Text>
</TouchableOpacity>
</View>
<View style={{ marginTop: 20}}>
{
tab === "TAB1" ? (
<View>
<InputComponent tab={tab} />
</View>
) : (
<View>
<InputComponent tab={tab} />
</View>
)
}
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#fff',
marginTop: 100,
padding: 10
},
});
输入组件.js
export function InputComponent({ tab }) {
const [value, setValue] = useState("");
return (
<View>
<Text>{tab}</Text>
<TextInput placeholder="INPUT HERE" value={value} onChangeText={setValue}/>
</View>
)
}
似乎输入组件重新呈现,但其中的文本输入并没有改变。
解决方案
这是一个很好的问题。这是因为我们只导入一次并将其传递给两个不同的组件。它更改选项卡但使用相同的文本输入状态,因为它们使用相同的键。
要在 key prop 中修复此 pass,以便 React 知道该选项卡已更改:
{
tab === "TAB1" ? (
<View>
<InputComponent key={1} tab={tab} />
</View>
) : (
<View>
<InputComponent key={2} tab={tab} />
</View>
)
}
推荐阅读
- c# - c# - 异步/等待超出预期顺序
- python - Python 3.4- 无法将特定行读入框中
- javascript - 如何使用javascript读取目录中的所有文件夹名称?
- .net - .Net Tcp/ip 数据接收
- python - 如何在 python 中处理 csv 文件中的 json 数据?
- java - JavaFX:添加单击侦听器以识别在 TableView 中单击了哪个单元格
- python - 如何在 groupby 之后获取 Pandas DataFrame 的行号
- parallel-processing - sge 由于过载或满而丢弃的所有队列
- ibm-watson - 如何在 MessageResponse Watson Assistant Java 客户端中获取“操作”数据
- c# - 使用 Null 传播时出现 NullReferenceException