【发布时间】:2019-02-28 19:08:32
【问题描述】:
我有一系列交易所,一旦用户选择了交易所,我想同时使用交易所的名称和基本报价。
例如,如果用户选择下面的第一个选项,我想捕获"poloniex" 以及基本密钥"USDC"。
首先我尝试使用这个:
{exchanges.map((exchange, i) =>
(<option key={i} value={exchange.exchange} base={exchange.quote}>
{capFirst(exchange.exchange)} ({exchange.quote}) ${exchange.price_quote}
</option>))}
但是我得到base 不存在的错误,但是我不应该能够向选项添加任何属性吗?如果它在 JSX 中,也许不是? data 也不起作用。
类型'{孩子:字符串[];键:数字;值:字符串;基数:字符串; }' 不可分配给类型 'DetailedHTMLProps, HTMLOptionElement>'。 'DetailedHTMLProps, HTMLOptionElement>'.ts(2322)
类型不存在属性'base'
我尝试的另一种方法是获取所选选项的索引键,但是下面的代码会生成key = null。
target.value 下面会给我它的价值,但我还需要基本报价。
@bind
handleExchangeSelect(event: React.FormEvent<HTMLSelectElement>) {
const { exchanges } = this.props;
const target = event.target as HTMLSelectElement;
console.log('target', target);
const exchange = target.value;
const key = target.getAttribute('key');
console.log('exchange', exchange);
console.log('key', key);
// if (key) {
// console.log(exchanges[Number(key)]);
// }
this.setState({
exchange,
// exchange_base: base ? base : ''
});
}
【问题讨论】:
-
使用 react 不需要将数据编码到 DOM 中(很少有例外)。向 DOM 元素添加任意属性也违反了 HTML 标准。
base不是<option>元素的有效属性。组件可以在内部保存所有需要的数据。 -
@trixn 你能发布你的例子吗?我找到了一种方法来实现这一点,但似乎应该有更好更直接的方法。
标签: javascript reactjs typescript drop-down-menu select-options