Я новичок в разработке, поэтому любая помощь приветствуется :)
Вот моя проблема:
Я использую next.js - это может быть важно, потому что f.ex. document.createElement, похоже, работает только с useEffect.
Я создал текстовую область, в которую пользователи добавляют слова, разделенные запятыми (например, «Nike, Adidas, New Balance»). Я хочу переписать существующий код ниже, чтобы:
- таблица отображается / отображается только тогда, когда пользователь что-то добавляет в поле ввода
- каждое слово из поля ввода (например, Nike, Adidas) создает новую строку в таблице (в заголовке таблицы «Бренд»).
К настоящему времени я пытался использовать методы .split и .forEach для создания нового элемента (таблицы). Но я просто не могу заставить его работать - может, это просто не то решение. Любая помощь приветствуется!
function Analyzer() {
const [brand, setBrand] = React.useState('');
const handleChange = (event) => {
setBrand(event.target.value.split(','))};
return(
<div>
<textarea type="text"
placeholder="Example:
Nike, Adidas, New Balance ..."
onChange={handleChange}></textarea>
<table className={styles.table}>
<thead>
<tr>
<th>No.</th>
<th>Brand</th>
<th>Also known as</th>
<th>Avg. price</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>{brand}</td>
<td></td>
<td><input type= "number"></input>%</td>
</tr>
</tbody>
</table>
</div>);
}
1 ответ
Попробуйте что-нибудь вроде следующего. Я извлек компонент Table
и поместил в него все условия для его рендеринга. Вы даже можете создать отдельный файл для этого компонента и передать ему все необходимые реквизиты.
Во-вторых, я помещаю список брендов в состояние brands
в функции handleChange
. Затем эта переменная состояния повторяется с помощью .map
для визуализации каждой строки в таблице.
function Analyzer() {
const [brands, setBrands] = React.useState([]);
const handleChange = ({ target }) => {
const { value } = target;
setBrands(value.split(','));
};
const Table = () => {
if (!brands || brands.length === 0) return null;
return (
<table className={styles.table}>
<thead>
<tr>
<th>No.</th>
<th>Brand</th>
<th>Also known as</th>
<th>Avg. price</th>
</tr>
</thead>
<tbody>
{brands.map((brand) => (
<tr>
<td>1</td>
<td>{brand}</td>
<td></td>
<td><input type= "number"></input>%</td>
</tr>
)}
</tbody>
</table>
);
};
return(
<div>
<input
onChange={handleChange}
placeholder="Example: Nike, Adidas, New Balance ..."
type="text"
value={brands}
/>
<Table />
</div>
);
};
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Имейте в виду, что JavaScript — это НЕ то же самое, что Java! Включите все ярлыки, относящиеся к вашему вопросу; например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [svelte] и т. д.