#javascript #reactjs
Вопрос:
Мой компонент поиска возвращает сопоставленный список результатов на основе входных данных. В зависимости от выбранного элемента списка я хочу назначить его своему текущему состоянию запасов, но я не уверен, как бы я получил доступ к этому конкретному элементу.
const selectStock = ()=>{
setSearch("");
setCurrentStock();
}
return (
<div className="searchContainer">
<form className="searchBar">
<input
className="search"
type="text"
placeholder="Search Ticker Symbol"
onChange={handleSearch}
/>
</form>
<div className="searchResults">
<ul>
{/* {stockNames.map((stockname) => {
const { name, symbol} = stockname;
return (
<li className="displaySearch" onClick={selectStock} key={symbol}>
<p>{name} ({symbol})</p>
</li>
);
})} */}
</ul>
</div>
</div>
);
}
Комментарии:
1. Каррирование-хороший вариант или просто передача анонимной функции.
onClick={() => selectStock(stockname)}
Ответ №1:
Во-первых, вы захотите изменить свою selectStock
функцию, чтобы она принимала stockName
значение, на которое она должна быть установлена. Это должно быть передано вашей setCurrentStock
функции:
const selectStock = (nextStock) => {
setSearch("");
setCurrentStock(nextStock);
}
Затем передайте onClick
функцию со стрелкой в функцию для выбранной строки:
<div className="searchResults">
<ul>
{stockNames.map((stockname) => {
const { name, symbol } = stockname;
return (
<li className="displaySearch" onClick={() => selectStock(stockname)} key={symbol}>
<p>{name} ({symbol})</p>
</li>
);
})}
</ul>
</div>
Это, по сути, создает новую функцию для каждой строки, которая специфична для нее самой. Когда эта строка нажата, она запускает свой собственный уникальный onClick
, который передает свое собственное stockname
значение selectStock
.
Ответ №2:
Вы можете передать выбранный запас в функцию selectStock, сделав ее функцией ES6.
Смотреть ниже:
const selectStock = (selectedStock)=>{
setSearch("");
setCurrentStock(selectedStock);
}
return (
<div className="searchContainer">
<form className="searchBar">
<input
className="search"
type="text"
placeholder="Search Ticker Symbol"
onChange={handleSearch}
/>
</form>
<div className="searchResults">
<ul>
{/* {stockNames.map((stockname) => {
const { name, symbol} = stockname;
return (
<li className="displaySearch" onClick={()=>selectStock(stockName)} key={symbol}>
<p>{name} ({symbol})</p>
</li>
);
})} */}
</ul>
</div>
</div>
);
При необходимости вы можете передать другие переменные аналогичным образом.