【发布时间】:2020-04-01 11:37:23
【问题描述】:
我正在创建一个调查问卷,其中收集所选输入的值并对其进行平均以产生分数。看起来很容易,但我很难得到它们。目前我的目标只是获取值开始,但似乎我只能在单击提交按钮时获取最后一个选择输入的值,调用handleClick() 事件。
我不确定我是否做得对。通过一些指南,我看到其他人使用useRef() 函数,但我也看到了createRef()。
我正在使用 Gatsby JS 和 GraphQL 进行数据查询。我很感激任何建议。
const Questionnaire = (props: Props) => {
const data = props.data!
const questionnaire = data.allContentfulQuestionnaire.edges
let i = 0
const selectInput = useRef()
const handleClick = () => {
for (const r in selectInput) {
console.log("foo: ", selectInput.current.value)
console.log("bar: ", r.valueOf())
}
}
return (
<Layout>
<Container>
{questionnaire?.map(({ node }: any) => (
<>
<h2>{node?.title}</h2>
{node?.questions?.map(({ answers, question }: any) => (
<Question key={question?.id}>
<P>
{++i}. {question?.question}
</P>
<select key={question?.id} ref={selectInput}>
<option>Select Response</option>
{answers.map(({ title, id, score }: any) => (
<option key={id} value={score}>
{title}
</option>
))}
</select>
</Question>
))}
</>
))}
<Submit onClick={handleClick}>Submit</Submit>
</Container>
</Layout>
)
}
【问题讨论】:
-
为什么不在选择时使用
on changecallback?? -
useRef仅适用于一个上下文。 -
反应滥用 - 避免在 DOM 中保持状态...
useState...阅读反应文档/教程(处理事件)!
标签: javascript reactjs graphql gatsby ref