【发布时间】:2020-05-01 19:31:22
【问题描述】:
user 对象有一个数组属性 schools 引用一个或多个学校对象。我想使用 <List> 和 <CheckBox> 来改变 schools 数组。
我将user 对象加载到视图中,并加载listOfSchools(从应用程序状态)以生成复选框列表:
<List data={listOfSchools} keyExtractor={ item=> item._id } renderItem={({item})=>renderItem(item)} />
renderItem 函数:
const renderItem = (school) => {
return <ListItem
title={school.name}
accessory={()=>renderAccessory(school)}
/>
};
renderAccessory 函数:
const renderAccessory = (school) => {
return <CheckBox checked={() => checkSchool(school._id)} onChange={()=>changeSchool(school._id)} />
}
如果school._id 在user.schools 数组中被引用,checkSchool 函数将返回布尔值。 changeSchool 函数在users.schools 数组中添加或删除school._id。
changeSchool 函数:
const changeSchool = (schoolId) => {
let checked = checkSchool(schoolId);
if (!checked) {
// add schoolId to user.schools
} else {
// remove schoolId from user.schools
}
}
这根本行不通。看来,无论我使用什么来改变状态,复选框都不会更新,user.schools 数组也不会改变。
构建这样一个设计目标的正确方法是什么?
【问题讨论】:
-
我假设你使用 React Native Elements。如果是这种情况,
checked需要是boolean -
澄清一下,我正在使用 ui-kitten,这似乎几乎相同。 onChange 是一个可用的道具。 @CornelRaiu,
checkSchool返回一个布尔值。这可以接受吗? -
我明白了。那我去看看
-
现在可以了吗?我目前只是在更新我的答案
-
看来这是主要问题,是的。如果你发布你的答案,我会接受它
标签: react-native react-native-ui-kitten