react-native - 回答另一个调查问题回来后,我需要显示已检查的项目
问题描述
我正在执行调查,其中对于第一个调查问题,我将复选框的选中项目存储到对象数组中,并且在回答第二个问题后,当我回到第一个问题时,我想显示以前选中的项目。任何帮助表示赞赏。谢谢你
我在其中存储复选框的选中项的数组:
Array[
Object{
"QuestionId" : 4,
"answers" : Array[
Object {
"SurveyAnswer":"Pasta",
"UniqueID":16,
"isCheck":true,
},
Object {
"SurveyAnswer":"Ganji",
"UniqueID":17,
"isCheck":true,
},
],
},
]
如图所示,单击下一步按钮将出现第二组问题,其中包含上一个按钮。 第一组问题的图像
代码 :
const SurveyList = ({questionid, navigation }) => {
let newList = [];
let resArray =[];
let arraylength;
let index;
let data=[];
let optlist=[];
let selectedAnswers=[];
let qustnId=[];
var result=[];
const [FontReady, setFontReady] = useState(false);
const [value1, setValue1] = React.useState('');
const [value2, setValue2] = React.useState('');
const [selected,setselected]=useState('');
const [list, setList] = useState([]);
const [optionlist,setoptionlist]=useState([]);
const [spin, setSpin] = useState(false);
const [errMsg, setErrMsg] = useState(false);
const [category,setcategory] = useState('');
const [endIndex,setendIndex] = useState('');
const [interData,setinterData] = useState('');
const [checkBool1, setcheckBool1] = useState(false);
const [selectedFruits, setSelectedFruits] = useState([]);
const onValueChange = (item, index) => {
console.log("item "+index);
const newData = [...optionlist];
newData[index].isCheck =!item.isCheck;
genericConsole.consoleFunction("newdata arr-"+newData[index].isCheck);
setoptionlist(newData);
result = newData.filter(obj => {
return obj.isCheck === true
})
console.log("array-----")
console.log(optionlist);
console.log(result)
}
const getData = async (variable,indexVal) => {
const value = await AsyncStorage.getItem('token');
// setindexVal(index);
index=indexVal;
setSpin(true);
let config = {
method: 'POST',
url: '/api/RYH/getSurveyById',
headers: {
Authorization: value
},
data: {
"ID": variable
}
};
genericConsole.consoleFunction(config);
try {
return axios(config).then((response) => {
setSpin(false);
genericConsole.consoleFunction(response.data);
setList(null);
arraylength=response.data.length;
newList = response.data[indexVal].Question;
optlist = response.data[indexVal].answers;
setList(newList);
setoptionlist(optlist);
qustnId=response.data[indexVal].QuestionID;
setcategory(response.data[indexVal].Type)
genericConsole.consoleFunction("!!!!!");
genericConsole.consoleFunction(qustnId);
})
} catch (err) {
genericConsole.consoleFunction(err);
}
}
const nextData = () =>
{
index=index+1;
genericConsole.consoleFunction("---"+index);
selectedAnswers.push({
QuestionId: qustnId,
answers: result
});
genericConsole.consoleFunction("answers stored");
genericConsole.consoleFunction(selectedAnswers);
getData([questionid],index);
if(index==arraylength-1){
setendIndex("true");
genericConsole.consoleFunction("---"+endIndex);
}
else if(index!=0 && index!=arraylength-1)
{
setinterData("true");
}
}
const prevData = () =>
{
index=index-1;
setendIndex("false");
getData([questionid],index);
genericConsole.consoleFunction("answers stored after clicking prev btn---");
genericConsole.consoleFunction(selectedAnswers);
}
let [fontsLoaded] = useFonts({
'Avenir-Roman': require('../../assets/fonts/Avenir-Roman.ttf'),
'Avenir-Book': require('../../assets/fonts/Avenir-Book.ttf'),
'Avenir-Heavy': require('../../assets/fonts/Avenir-Heavy.ttf'),
'Avenir-Medium': require('../../assets/fonts/Avenir-Medium.ttf'),
'Helvetica': require('../../assets/fonts/Helvetica.ttf'),
});
useEffect(() => {
getData([questionid],0);
setFontReady(true);
console.disableYellowBox = true;
}, []);
if (!fontsLoaded) {
return <AppLoading />;
}
else {
return (<View >
<View>
</View>
<Col style={styles.container}>
<Row size={15}><Text style={styles.categoryText}>{newList}</Text></Row>
{category=='Checkbox' &&
optlist.map((item, index) => {console.log("item--"+index)
return <Row>
<CheckBox
title={item.SurveyAnswer}
checkedIcon={<Image source={require('../../assets/tick_enabled.png')}/>}
uncheckedIcon={<Image source={require('../../assets/tick_disabled.png')}/>}
containerStyle={{backgroundColor:'transparent', borderColor:'transparent',}}
checked={item.isCheck || false}
textStyle={{fontSize:14, color:'#3a3a3a',
fontWeight:'normal'}}
fontFamily={'Avenir-Roman'}
onPress={(val) => onValueChange(item, index)}
key={item.SurveyAnswer}
/>
</Row>
})
}
</Col>
{index===0?
<View style={styles.generate}>
<TouchableOpacity onPress={() =>nextData(index) } >
<LinearGradient start={{ x: 0, y: 0 }} end={{ x: 1,
y: 0 }} colors={['#fc6f77', '#ffa476']} style={{
height: 40, borderRadius: 20, paddingHorizontal: '10%'
}}>
<Text style={styles.generateText}>Next</Text>
</LinearGradient>
</TouchableOpacity>
</View>:null
}
{ interData=="true" ?
<View style={{flexDirection:'row'}}>
<TouchableOpacity onPress={() =>prevData(index) } >
<LinearGradient start={{ x: 0, y: 0 }} end={{ x: 1, y:
0 }} colors={['#fc6f77', '#ffa476']} style={{ height:
40, borderRadius: 20, paddingHorizontal: '10%' }}>
<Text style={styles.generateText}>Back</Text>
</LinearGradient>
</TouchableOpacity>
<TouchableOpacity >
<LinearGradient start={{ x: 0, y: 0 }} end={{ x: 1, y:
0 }} colors={['#fc6f77', '#ffa476']} style={{ height:
40, borderRadius: 20, paddingHorizontal: '10%' }}>
<Text style={styles.generateText}>Next</Text>
</LinearGradient>
</TouchableOpacity>
</View>:null
}
{ endIndex=="true" ?
<View style={{flexDirection:'row'}}>
<TouchableOpacity onPress={() =>prevData(index) } >
<LinearGradient start={{ x: 0, y: 0 }} end={{ x: 1,
y: 0 }} colors={['#fc6f77', '#ffa476']} style={{
height: 40, borderRadius: 20, paddingHorizontal:
'10%' }}>
<Text style={styles.generateText}>Back</Text>
</LinearGradient>
</TouchableOpacity>
<TouchableOpacity >
<LinearGradient start={{ x: 0, y: 0 }} end={{ x: 1,
y: 0 }} colors={['#fc6f77', '#ffa476']} style={{
height: 40, borderRadius: 20, paddingHorizontal:
'10%' }}>
<Text style={styles.generateText}>Finish</Text>
</LinearGradient>
</TouchableOpacity>
</View>:null
}
</View>
)
}
}
解决方案
我不确定我是否正确理解了您的问题。我有两种不同情况的答案。
为了在回到问题集中的旧问题时显示相同的结果,您可以考虑将结果存储在像https://www.npmjs.com/package/react-native-sqlite-storage这样的数据库中,您可以从中检索数据那里。并在不再需要时清除它们。
或者可能是您的数据应该存储在父组件中以保留它,而答案集组件应该是它的子组件。
推荐阅读
- ios - 将 CVPixelBuffer 转换为 MTLTexture 的意外输出
- ruby - 将 http 状态代码 201 设置为动作控制器 rails 中的 API 响应
- visual-studio-code - 带有树视图和自定义上下文菜单的 VSCode 扩展
- php - YouTube API 数据 Foreach 循环(检索第一个视频 ID)
- javascript - 了解 mapStateToProps
- asp.net - 将项目从 tfs 加载到其他路径后,Owin 出现“系统找不到指定的文件”错误
- firebase - Firebase 返回响应对象,但不使用本机反应向我的 SIM 卡发送验证码
- mapbox - Mapbox GL JS update Coordinates of places Layer
- javascript - Angular 7,如何为 IE11 将导入的模块转换为 es5
- python - Django 在“意外的关键字参数'allow_blank'”上失败,即使我正在关注文档