如何在React中检测选择元素的变化?

huangapple go评论111阅读模式
英文:

How do I detect a change in a select element in React?

问题

我有一个包含select下拉框的HTML表单,供用户选择颜色,我正在尝试检测何时选择了新颜色。我已经添加了onchange属性,并附加了一个console.log()函数,但当我选择新颜色时,控制台没有输出任何内容。

这是我的select元素,它包含在表单的return语句中:

  1. <select id="color-selector"
  2. name="colors"
  3. onchange={() => console.log("颜色已更改")}>
  4. <option value="red">红色</option>
  5. <option value="green">绿色</option>
  6. <option value="blue">蓝色</option>
  7. <option value="yellow">黄色</option>
  8. <option value="orange">橙色</option>
  9. <option value="purple">紫色</option>
  10. </select>

我看到这在纯JS中是可能的,来自这个问题,但是否有办法在React中使用HTML的onchange属性来实现这一点?

英文:

I have an HTML form with a select dropdown for users to select a color, and I'm trying to detect when a new color has been selected. I've added the onchange attribute with a console.log() function, but nothing is printed to console when I select a new color.

Here's my select element which is contained in the return statement for the form:

  1. &lt;select id=&quot;color-selector&quot;
  2. name=&quot;colors&quot;
  3. onchange={() =&gt; console.log(&quot;Color has changed&quot;)}&gt;
  4. &lt;option value=&quot;red&quot;&gt;Red&lt;/option&gt;
  5. &lt;option value=&quot;green&quot;&gt;Green&lt;/option&gt;
  6. &lt;option value=&quot;blue&quot;&gt;Blue&lt;/option&gt;
  7. &lt;option value=&quot;yellow&quot;&gt;Yellow&lt;/option&gt;
  8. &lt;option value=&quot;orange&quot;&gt;Orange&lt;/option&gt;
  9. &lt;option value=&quot;purple&quot;&gt;Purple&lt;/option&gt;
  10. &lt;/select&gt;

I've seen this is possible in vanilla JS from this question, but is there a way to do this by using the onchange attribute in the HTML in React?

答案1

得分: 1

  1. import React, {
  2. FormEvent,
  3. FormEventHandler,
  4. SelectHTMLAttributes,
  5. useState,
  6. } from "react";
  7. export default function Home() {
  8. const [color, setColor] = useState("");
  9. function colorChange(e) {
  10. setColor(e.target.value);
  11. console.log(e.target.value);
  12. }
  13. return (
  14. <div>
  15. <select name="color" id="color" value={color} onChange={colorChange}>
  16. <option value="">选择选项</option>
  17. <option value="red">红色</option>
  18. <option value="blue">蓝色</option>
  19. <option value="green">绿色</option>
  20. </select>
  21. </div>
  22. );
  23. }
英文:
  1. import React, {
  2. FormEvent,
  3. FormEventHandler,
  4. SelectHTMLAttributes,
  5. useState,
  6. } from &quot;react&quot;;
  7. export default function Home() {
  8. const [color, setColor] = useState(&quot;&quot;);
  9. function colorChange(e) {
  10. setColor(e.target.value);
  11. console.log(e.target.value);
  12. }
  13. return (
  14. &lt;div&gt;
  15. &lt;select name=&quot;color&quot; id=&quot;color&quot; value={color} onChange={colorChange}&gt;
  16. &lt;option value=&quot;&quot;&gt;Select option&lt;/option&gt;
  17. &lt;option value=&quot;red&quot;&gt;Red&lt;/option&gt;
  18. &lt;option value=&quot;blue&quot;&gt;Blue&lt;/option&gt;
  19. &lt;option value=&quot;green&quot;&gt;Green&lt;/option&gt;
  20. &lt;/select&gt;
  21. &lt;/div&gt;
  22. );
  23. }

答案2

得分: 1

你拼错了 onChange。在 Reactjs 中,所有的回调函数都是以驼峰命名法编写的。在简单的 HTML 中,属性名是 onchange

英文:

You've misspelled onChange. All callbacks in Reactjs are written in camel-case. It's in simple HTML that the attribute is onchange.

huangapple
  • 本文由 发表于 2023年5月28日 14:08:24
  • 转载请务必保留本文链接:https://go.coder-hub.com/76350169.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定