Как сделать так, чтобы в зависимости от выбора был виден только один абзац?
Дан селект и 3 абзаца. В селекте можно выбрать один из трех пунктов. Нужно сделать так, чтобы в зависимости от выбора на экране был виден один из трех абзацев.
state = {
value: 0,
options: [ '1', '2', '3' ],
}
render() {
const { value, options } = this.state;
return (
<div>
<select>
{options.map((n, i) => <option value={i}>{n}</option>)}
</select>
<br />
<p style={{opacity: 0}}>1 text</p>
<p style={{opacity: 0}}>2 text</p>
<p style={{opacity: 0}}>3 text</p>
</div>
);
}
Ответы (2 шт):
Автор решения: yourBadApple
→ Ссылка
вам нужно повесить обработчик click для каждого абзаца, которые будете выбирать, потом внутри события вызвать функции, в которой будете менять уже собственно state
Автор решения: Andrew F
→ Ссылка
Не обязательно держать в доме все 3 абзаца, в зависимости от состояния можно задать содержимое для одного и того же параграфа. Вот один из вариантов реализации
const {useState} = React;
const Example = () => {
const posts = {1: 'text1', 2: 'text2', 3: 'text3'}
const [currentPost, setCurrentPost] = useState(1);
const [options] = useState([ '1', '2', '3' ])
const handleSelect = ({target}) => {
setCurrentPost(target.value)
}
return (
<div>
<select onChange={handleSelect}>
{options.map((n, i) => <option value={n}>{n}</option>)}
</select>
<p>{posts[currentPost]}</p>
</div>
);
};
<div id="react"></div>
// Render it
ReactDOM.render(
<Example />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/17.0.1/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/17.0.1/umd/react-dom.production.min.js"></script>
<div id="react"></div>