#reactjs
Вопрос:
У меня есть два компонента реакции
class App extends React.Component {
render() {
return (
<div id="appWrapper">
<ConfigureWindow />
<button id="configureClocksButton">Configure clocks</button>
<section id="clocksHere"></section>
</div>
);
}
}
const ConfigureWindow = () => (
<div id="configureWindowWrapper">
<div id="configureWindow">
<section id="addCitySection">TODO: adding a city</section>
<div id="verticalLine"></div>
<section id="listOfCities">
<header>
<h1>Available cities</h1>
<div id="closeConfigureWindowWrapper">
<img src="..srcimagesexit.png" id="closeConfigureWindow" alt="" />
</div>
</header>
<section id="availableCities"></section>
</section>
</div>
</div>
);
Я хочу, чтобы «ConfigureWindow» отображался при «configureClocksButton». Я попытался выполнить его с реквизитами, состоянием и функцией, но получил ошибки. Также было бы неплохо, если бы вы объяснили мне, как создавать новые компоненты React с функциями React?
Комментарии:
1. Немного сложно понять ваш пост, но я так понимаю, вы хотите нажать кнопку
id="configureClocksButton"
и что-то сделать сConfigureWindow
компонентом?2. Да. id=»configureClocksButton» — это кнопка, которую пользователь нажимает, чтобы отобразить окно конфигурации
Ответ №1:
Вы, вероятно, хотите использовать реакцию.JS событие onClick (https://reactjs.org/docs/handling-events.html), и состояние для хранения действия. Чтобы создать функциональный компонент, вам просто нужно вернуть JSX, который вы хотите отобразить, и использовать крючки (https://reactjs.org/docs/hooks-intro.html), а затем выполните условный рендеринг (https://reactjs.org/docs/conditional-rendering.html):
const App = () => {
const [toggleConfiguration, setToggleConfiguration] = useState(false)
return (
<div id="appWrapper">
{toggleConfiguration amp;amp; <ConfigureWindow />}
<button onClick{() => setToggleConfiguration(true)} id="configureClocksButton">Configure clocks</button>
<section id="clocksHere"></section>
</div>
);
}
Комментарии:
1. Что нужно изменить в окне конфигурации, чтобы оно работало?
2. Вам не нужно изменять компонент ConfigureWindow.
Ответ №2:
Немного сложно понять ваш пост, но я понимаю, что вы хотите нажать на кнопку id="configureClocksButton"
и условно отобразить ConfigureWindow
компонент.
Вы можете сделать это с помощью некоторого логического состояния, обработчика щелчка для переключения состояния и некоторого условного рендеринга.
class App extends React.Component {
this.state = {
showConfigureWindow: false,
}
toggleShowConfigureWindow = () => this.setState(prevState => ({
showConfigureWindow: !prevState.showConfigureWindow,
}))
render() {
return (
<div id="appWrapper">
{showConfigureWindow amp;amp; <ConfigureWindow />}
<button
id="configureClocksButton"
onClick={this.toggleShowConfigureWindow}
>
Configure clocks
</button>
<section id="clocksHere"></section>
</div>
);
}
}
Функциональный компонент, эквивалентный:
const App = () => {
const [showConfigureWindow, setShowConfigureWindow] = React.useState(false);
const toggleShowConfigureWindow = () => setShowConfigureWindow(show => !show);
return (
<div id="appWrapper">
{showConfigureWindow amp;amp; <ConfigureWindow />}
<button
id="configureClocksButton"
onClick={toggleShowConfigureWindow}
>
Configure clocks
</button>
<section id="clocksHere"></section>
</div>
);
}