给数组赋索引,onClick根据item的位置传递
Assign index to array, and onClick pass it based on item's position
我有一个搜索栏,显示来自 API 使用 .filter().includes(string)
的搜索建议。
简而言之:我需要为搜索结果数组动态分配索引 - 每次它显示不同数量的结果
如果有人键入 'b',它会显示所有以 B 开头的项目。但是,onClick 只会将第一个添加到顶部。因为我是这样硬编码的。我需要找到一种方法来为搜索过滤器的每个项目设置一个索引,然后将它而不是像 [i] 那样的 [0](i = 对应于数组中所需搜索的索引)传递给执行的这个函数点击
const handleAdd = (e) => { // onClick={handleAdd}
e.preventDefault();
setCryptolist(
[ ... cryptolist ,
{
id: filteredCoins[0]['id'], // [i]
current_price: filteredCoins[0]['current_price'], // [i]
name: filteredCoins[0]['name'], // [i]
symbol: filteredCoins[0]['symbol'], // [i]
image: filteredCoins[0]['image'], // [i]
price_change_percentage_24h: filteredCoins[0]['price_change_percentage_24h'], // [i]
}
]
)
}
如您所见,从这个数组中添加索引为 0 的项目是硬编码的:
(3) [{…}, {…}, {…}]
0: {id: 'bitcoin', symbol: 'btc', name: 'Bitcoin', image: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', current_price: 28982, …}
1: {id: 'binancecoin', symbol: 'bnb', name: 'BNB', image: 'https://assets.coingecko.com/coins/images/825/large/bnb-icon2_2x.png?1644979850', current_price: 307.58, …}
2: {id: 'binance-usd', symbol: 'busd', name: 'Binance USD', image: 'https://assets.coingecko.com/coins/images/9576/large/BUSD.png?1568947766', current_price: 1.001, …}
length: 3[[Prototype]]: Array(0)
如果我把问题解释清楚了,请告诉我,我该如何解决。
最后是我过滤搜索的方式:
const filteredCoins = coins.filter(coin =>
coin.name.toLowerCase().includes(search.toLowerCase())
);
非常感谢任何帮助。
不确定我是否 100% 理解您的问题,但我认为您有这样的组件:
const CoinList = () => {
// some code..
const filteredCoins = /* ... */;
const handleAdd = (e) => { /* ... */ };
return (
<div>
{filteredCoins.map(coin => (
<div key={coin.id} onClick={handleAdd}>{coin.name}</div>
)}
<div>
);
}
您可以将索引(传递给 map
的函数的第二个参数)传递给 handleAdd
,如下所示:
const CoinList = () => {
// some code..
const filteredCoins = /* ... */;
const handleAdd = (e, i) => { /* use i here */ };
return (
<div>
{filteredCoins.map((coin, i) => (
<div key={coin.id} onClick={(e) => handleAdd(e, i)}>{coin.name}</div>
)}
<div>
);
}
这将允许您根据需要在 handleAdd
函数中使用索引 i
。
我有一个搜索栏,显示来自 API 使用 .filter().includes(string)
的搜索建议。
简而言之:我需要为搜索结果数组动态分配索引 - 每次它显示不同数量的结果
如果有人键入 'b',它会显示所有以 B 开头的项目。但是,onClick 只会将第一个添加到顶部。因为我是这样硬编码的。我需要找到一种方法来为搜索过滤器的每个项目设置一个索引,然后将它而不是像 [i] 那样的 [0](i = 对应于数组中所需搜索的索引)传递给执行的这个函数点击
const handleAdd = (e) => { // onClick={handleAdd}
e.preventDefault();
setCryptolist(
[ ... cryptolist ,
{
id: filteredCoins[0]['id'], // [i]
current_price: filteredCoins[0]['current_price'], // [i]
name: filteredCoins[0]['name'], // [i]
symbol: filteredCoins[0]['symbol'], // [i]
image: filteredCoins[0]['image'], // [i]
price_change_percentage_24h: filteredCoins[0]['price_change_percentage_24h'], // [i]
}
]
)
}
如您所见,从这个数组中添加索引为 0 的项目是硬编码的:
(3) [{…}, {…}, {…}]
0: {id: 'bitcoin', symbol: 'btc', name: 'Bitcoin', image: 'https://assets.coingecko.com/coins/images/1/large/bitcoin.png?1547033579', current_price: 28982, …}
1: {id: 'binancecoin', symbol: 'bnb', name: 'BNB', image: 'https://assets.coingecko.com/coins/images/825/large/bnb-icon2_2x.png?1644979850', current_price: 307.58, …}
2: {id: 'binance-usd', symbol: 'busd', name: 'Binance USD', image: 'https://assets.coingecko.com/coins/images/9576/large/BUSD.png?1568947766', current_price: 1.001, …}
length: 3[[Prototype]]: Array(0)
如果我把问题解释清楚了,请告诉我,我该如何解决。
最后是我过滤搜索的方式:
const filteredCoins = coins.filter(coin =>
coin.name.toLowerCase().includes(search.toLowerCase())
);
非常感谢任何帮助。
不确定我是否 100% 理解您的问题,但我认为您有这样的组件:
const CoinList = () => {
// some code..
const filteredCoins = /* ... */;
const handleAdd = (e) => { /* ... */ };
return (
<div>
{filteredCoins.map(coin => (
<div key={coin.id} onClick={handleAdd}>{coin.name}</div>
)}
<div>
);
}
您可以将索引(传递给 map
的函数的第二个参数)传递给 handleAdd
,如下所示:
const CoinList = () => {
// some code..
const filteredCoins = /* ... */;
const handleAdd = (e, i) => { /* use i here */ };
return (
<div>
{filteredCoins.map((coin, i) => (
<div key={coin.id} onClick={(e) => handleAdd(e, i)}>{coin.name}</div>
)}
<div>
);
}
这将允许您根据需要在 handleAdd
函数中使用索引 i
。