import {FC, useCallback, useEffect, useState} from "react"; import {Checkbox, CheckboxGroup, Radio, RadioGroup, Text, View} from "@tarojs/components"; import './topic.scss' interface Props { data: Multi onAnswer: (isAnswer: boolean) => void validate: boolean frequency?: number } const Multi: FC = ({data, onAnswer, validate, frequency}) => { const [rightAnswer, setRightAnswer] = useState([]) //答案 const rightKey = data?.right_answer?.split(',') || [] // 正确答案数组 const [error, setError] = useState(false) const answers = [ {value: "A", title: data.answerA}, {value: "B", title: data.answerB}, {value: "C", title: data.answerC}, {value: "D", title: data.answerD}, ] function RadioChange(e) { const value = e.detail.value setRightAnswer([value]) } const changeCheckbox = useCallback((value: string) => { const index = rightAnswer.indexOf(value) if (index === -1) { setRightAnswer([...rightAnswer, value]) } else { const oldRightAnswer: string[] = JSON.parse(JSON.stringify(rightAnswer)) oldRightAnswer.splice(index, 1) setRightAnswer(oldRightAnswer) } }, [rightAnswer]) useEffect(() => { if (validate) { if (rightAnswer.length !== rightKey.length) { onAnswer(false) setError(false) } else { const isAnswer = rightAnswer.reduce((pre, cut) => { if (!pre) { return false } return rightKey.indexOf(cut) !== -1 }, true) onAnswer(isAnswer) setError(!isAnswer) } } }, [validate]) return ( {data.type ? "多选题" : '单选题'} {data.question} {data.type ? {answers.map(d => changeCheckbox(d.value)} key={d.value} value={d.value} className='option' disabled={validate} checked={rightAnswer.includes(d.value)} > {d.value}:{d.title} )} : {answers.map(d => {d.value}:{d.title} )} } {error && frequency == 0 && 正确答案:{data.right_answer} 题目解析 {data.analysis} } ) } export default Multi