react-native - React Native Hooks - 尝试从类组件重构为函数组件以使用挂钩
问题描述
我是 react native 的新手,我正在尝试重构下面的代码,我认为我在这里做错了一些事情"setSentences(item)",因为它没有更新。你知道我在这里做错了什么吗?
this.state = {
sentences: [],
};
{this.state.sentences.map((item) => {
return(
<TouchableOpacity
onPress={() => {
item.selected = false;
this.setState(item);
}}>
</TouchableOpacity>
)}}
重构:
const [sentences, setSentences] = useState([]);
{sentences.map((item) => {
return (
<TouchableOpacity
onPress={() => {
item.selected = false;
setSentences(item);
}}>
</TouchableOpacity>
解决方案
要获得明确的解决方案,您必须创建一种这样的方法:
const onItemPress = (itemIndex) => {
const temp = [].concat(sentences);
temp[itemIndex].selected = false;
setSentences(temp);
}
现在,在 TouchableOpacityonPress
方法上调用此方法并将当前索引传递给此方法以修改该特定项目状态,如下所示:
{sentences.map((item, itemIndex) => {
return (
<TouchableOpacity
onPress={() => onItemPress(itemIndex)}>
</TouchableOpacity>
)
}}
请注意,您的状态应该是:
const [sentences, setSentences] = useState([]);
推荐阅读
- python - macOS 11 Big Sur 附带了哪些版本的 Python?
- mongodb - Mongodb 在聚合查询中使用 $text
- sorting - 这个汇编代码是否按升序排序数字?
- jmeter - 取消应用程序中的活动不起作用-Jmeter
- c++ - 对于循环 C++ 可能效率低下
- sqlite - 如何在 Qt 应用程序中调试 SQLite 查询?
- javascript - 我正在尝试在 .io 游戏的 HTML5 画布上放置玩家的图像
- docker - Docker 容器端口在 Kubernetes 中发生冲突
- swift - iPhone WKWebView:loadData 不适用于类型(Excel、MSWord、PPT、RTF)它显示所有 ascii 字符
- keras - Keras-组合模型如何仅提取自动编码器上的部分