【发布时间】:2021-04-02 13:10:33
【问题描述】:
我有一个小要求
我想知道如何通过 Sub Terms react native 将多复选框中的选中项设置为真或假
在下面的代码中,当我点击复选框时,我想在函数 onchecked() 中更改数组中的相关项并更新组件。
import React, { useState, useEffect } from "react";
import {
StyleSheet,
Text,
View,
CheckBox,
TouchableOpacity,
} from "react-native";
const terms = [
{
term_id: 21,
name: "Clothing",
checked: false,
children: [
{
term_id: 24,
name: "Accessories",
checked: false,
children: [
{
term_id: 25,
name: "Scarf",
checked: false,
children: [],
},
{
term_id: 22,
name: "Tshirts",
checked: false,
children: [],
},
],
},
],
},
];
export default function Categoris() {
const [unSelectedterms, setSelectionTerms] = useState(terms);
const onchecked = (id) => {
console.log(id);
setSelectionTerms(unSelectedterms);
};
const recursive = (data, level = 0) => {
return data.map((item, key) =>
item.children?.length ? (
<>
{renderItem(level, item.name, item.term_id, item.checked, key)}
{recursive(item.children, level + 1)}
</>
) : (
renderItem(level, item.name, item.term_id, item.checked, key)
)
);
};
const renderItem = (level, name, id, checked, key) => (
<TouchableOpacity
style={{ flexDirection: "row", alignItems: "center" }}
key={key}
onPress={() => {
onchecked(id);
}}
>
<CheckBox
value={checked}
onValueChange={() => {
onchecked(id);
}}
/>
<Text style={{ fontWeight: "bold" }}>
{name}
{id} {level > 0 && "- ".repeat(level)}
</Text>
</TouchableOpacity>
);
return <View style={styles.container}>{recursive(unSelectedterms)}</View>;
}
const styles = StyleSheet.create({
item: {
fontSize: 20,
},
container: {
backgroundColor: "#fff",
padding: 50,
},
});
在下面的代码中,当我点击复选框时,我想在函数 onchecked() 中更改数组中的相关项并更新组件。
【问题讨论】:
标签: reactjs react-native