[英]Populate select options from an array in React
我有这个 API 调用,它返回 Pokemon 的类型,如下所示:
["Grass", "Poison", "Fire", "Flying", "Water", "Bug", "Normal", "Electric", "Ground", "Fighting", "Psychic", "Rock", "Ice", "Ghost", "Dragon"]
这是一个函数的结果,该函数获取所有 Pokemon 值并过滤掉重复项等。 相同的函数用于获取这些值并填充选择选项:
let pokemonSingleType = (() => {
let types = pokemonData.reduce((acc, { type }) => (acc.push(...type), acc), [])
types = new Set(types);
types = [...types];
console.log(types);
return <option>
{types}
</option>
})();
这在下面呈现:
<select value={searchType} onChange={updateSearchByType.bind(this)}
className="formcontrol" id="typeSelect">
{pokemonSingleType}
</select>
问题是我将整个数组作为一个 Select 选项值。 请看下图:
输出如下:
此外,当我之前执行 for 循环时,它会在第一次迭代时停止:
let pokemonSingleType = (() => {
let types = pokemonData.reduce((acc, { type }) => (acc.push(...type), acc), [])
types = new Set(types);
types = [...types];
for(let i =0; i< types.length; i++){
return <option>
{types[i]}
</option>
}
})();
<option>
标签应该放在每个元素周围,而不是全部。 map
是实现此目的最直接的方法:
const Dropdown = ({options}) => <select> {options.map((e, i) => <option key={i}>{e}</option>)} </select> ; const pokemon = ["Grass", "Poison", "Fire", "Flying", "Water", "Bug", "Normal", "Electric", "Ground", "Fighting", "Psychic", "Rock", "Ice", "Ghost", "Dragon"]; ReactDOM.render(<Dropdown options={pokemon} />, document.body);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.6.3/umd/react.production.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.6.3/umd/react-dom.production.min.js"></script>
对于第二个例子中, return
在循环内将只返回第一个元素。 您可以将 JSX 元素推送到一个数组上并返回它,但这似乎仍然有很多间接性。
在这两个示例中,使用reduce
将数组中的每个元素扩展到数组累加器是一种反模式; map
在这方面做得最好。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.