Поскольку вы управляете рендерингом формы с одним значением состояния, форма для каждого элемента отображает форму при изменении значения состояния.
Вы должны установить уникальное значение для состояния, чтобы отображать каждую формувремя.
Сохранение идентификатора текущих активных элементов в состояние и проверка, активен ли этот элемент или нет, может быть простым решением.Это также гарантирует, что только одна форма будет активной.Если вам нужно активировать несколько форм, вы можете изменить приведенный ниже код, чтобы он содержал массив идентификаторов и проверял, существует ли идентификатор в массиве или нет.Эта реализация также требует, чтобы вы удалили идентификатор из массива при повторном щелчке, чтобы удалить форму для этого элемента.
Образец
state = { showing: ''};
renderLists(categories) {
const { showing } = this.state;
if (categories == null) return <div />;
return (
<ul className="ul">
{categories.map(category => {
return (
<li id={category._id} className="categories" key={category._id}>
{category.name}
<Posts categ={category._id} />
<button
className="label"
{/* Save item's id to state */}
onClick={() => this.setState({ showing: category._id })}
>
Add Comment
</button>
{/* check item's id */}
{(showing === category._id) ? (
<div>
<form method="post" action="/post/create-posts">
<input type="text" name="body" />
<input type="hidden" name="cat" value={category._id} />
<input type="submit" value="Submit" />
</form>
</div>
) : null}
</li>
);
})}
</ul>
);
}