React技巧之select标签设置占位符
总览
在React中为select
标签设置占位符:
- 将
select
标签的第一个option
元素设置为disabled
,并给它设置一个空字符串值。 - 初始化
select
标签的state
为空字符串。
// App.js
import {useState} from 'react';
const App = () => {
// ?️ initial value of empty string (first option)
const [selected, setSelected] = useState('');
const handleChange = event => {
console.log('Label ?️', event.target.selectedOptions[0].label);
console.log(event.target.value);
setSelected(event.target.value);
};
return (
<div>
<select value={selected} onChange={handleChange}>
<option disabled={true} value="">
--Choose and option--
</option>
<option value="apple">Apple ?</option>
<option value="banana">Banana ?</option>
<option value="kiwi">Kiwi ?</option>
</select>
</div>
);
};
export default App;
我们成功的为select
标签添加了占位符。
#设置option标签
需要注意的是,我们初始化selected
状态为''
(空字符串)。
const [selected, setSelected] = useState('');
接下来,设置第一个option
标签为disabled
,并给它设置一个空字符串值。
<div>
<select value={selected} onChange={handleChange}>
<option disabled={true} value="">
--Choose and option--
</option>
<option value="apple">Apple ?</option>
<option value="banana">Banana ?</option>
<option value="kiwi">Kiwi ?</option>
</select>
</div>
第一个option
元素将被展示,但是用户无法使用鼠标或者键盘选择该元素,因为我们设置了disabled
属性为true
。
设置change事件
我们在select
元素上设置了onChange
事件,所以每当值有变化的时候,handleChange
函数会被调用。
const handleChange = event => {
console.log('Label ?️', event.target.selectedOptions[0].label);
console.log(event.target.value);
setSelected(event.target.value);
};
event
对象上的target
属性是select
元素的引用,因此我们可以使用event.target.value
访问被选中的值。
在handleChange
函数中,我们使用被选择选项的值来更新state
。
遍历生成
你也可以将选项添加到一个数组中,并使用map()
方法对其进行迭代,以避免重复操作。
import {useState} from 'react';
const App = () => {
const options = [
{value: '', text: '--Choose an option--', disabled: true},
{value: 'apple', text: 'Apple ?'},
{value: 'banana', text: 'Banana ?'},
{value: 'kiwi', text: 'Kiwi ?'},
];
// ?️ initial value of empty string (first option)
const [selected, setSelected] = useState('');
const handleChange = event => {
console.log('Label ?️', event.target.selectedOptions[0].label);
console.log(event.target.value);
setSelected(event.target.value);
};
return (
<div>
<select value={selected} onChange={handleChange}>
{options.map(option => (
<option
disabled={option.disabled}
key={option.value}
value={option.value}
>
{option.text}
</option>
))}
</select>
</div>
);
};
export default App;
这个例子在一个数组中定义了所有的选项,以便使我们的JSX
代码更加简洁。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。