react-native - 如何从切换复选框中设置状态?
问题描述
当我尝试使用复选框中的 onToggle 将状态设置为 true 时,setState 不起作用。
我试图控制台记录该功能,它可以工作,只是状态不会改变。
import CircleCheckBox, { LABEL_POSITION } from 'react-native-circle-checkbox';
const MyTaskItem = (props) => {
return (
<CircleCheckBox
checked={props.taskDone}
onToggle={props.onToggleCheck}
/>
);
};
import MyTaskItem from "../../components/MyTaskItem";
export default function MyTasksScreen() {
const [taskDone, setTaskDone] = useState(false);
const checkDoneHandler = () => {
setTaskDone(true);
console.log(setTaskDone);
};
return (
<View style={styles.screen}>
<MyTaskInput visible={isAddMode} onAddTask={addTaskHandler} onCancel={cancelTaskAdditionHandler} />
<FlatList
keyExtractor={(item, index) => item.id}
data={myTasks}
renderItem={itemData =>
<MyTaskItem
id={itemData.item.id}
onDelete={removeTaskHandler}
title={itemData.item.title}
description={itemData.item.description}
onToggleCheck={checkDoneHandler}
/>}
/>
<AddTodoButton onPress={() => setIsAddMode(true)} />
</View>
);
}
切换复选框时,我想将 taskDone 上的状态更改为 true/false。
解决方案
我猜你想改变特定的任务状态,所以首先,你需要传递切换的任务的ID,所以MyTaskItem
可以这样重写:
const MyTaskItem = (props) => {
const {taskDone, id, onToggleCheck} = props;
return (
<CircleCheckBox
checked={taskDone}
onToggle={()=>onToggleCheck(id)}
/>
);
};
然后你应该在你的MyTasksScreen
. 由于FlatList
是 a PureComponent
,因此您需要将更改的状态传递给extraData
flatlist 的属性,以通知项目状态已更改。如果您想更改所有项目的done
状态,您可以这样做:
export default function MyTasksScreen() {
const [taskDone, setTaskDone] = useState(false);
const checkDoneHandler = () => {
setTaskDone(true);
console.log(setTaskDone);
};
return (
<View style={styles.screen}>
<MyTaskInput visible={isAddMode} onAddTask={addTaskHandler} onCancel={cancelTaskAdditionHandler} />
<FlatList
keyExtractor={(item, index) => item.id}
data={myTasks}
extraData={taskDone}
renderItem={itemData =>
<MyTaskItem
id={itemData.item.id}
onDelete={removeTaskHandler}
taskDone={taskDone}
title={itemData.item.title}
description={itemData.item.description}
onToggleCheck={checkDoneHandler}
/>}
/>
<AddTodoButton onPress={() => setIsAddMode(true)} />
</View>
);
}
推荐阅读
- java - java - 如何转换字符串中特殊字符的任何编码值并将其插入到Java中的JSON对象中?
- html - 您好,我如何加载具有不同 django 模态形式的两条路径?
- python - 如何提高python中的迭代性能
- python - setworldcoordinates 清除任何海龟绘图的屏幕
- javascript - 即使我添加了请求模块,也会出现“错误:找不到模块‘请求’”
- android - 我想使用 ngrok 生成我的 localhost html 页面的 qrcode 以在 android 上显示
- python - 在熊猫中将一列转换为整数以准备回归
- reactjs - font-family "ionicons" 不是系统字体,尚未通过 Font.loadAsync 加载
- php - PHP密码验证无法验证
- php - SQLSTATE [42S02]:未找到基表或视图:1146 表“My_database_Name.posts”不存在