Я знаю, что название может сбивать с толку, а также может звучать как повторение, пожалуйста, прочтите все описание, прежде чем отмечать его как повторяющееся, я новичок, чтобы отреагировать и мне нужна помощь.
Я создаю приборную панель. У меня есть div панели навигации, который имеет несколько вкладок и div контента, который имеет соответствующий контент. Как только вкладка нажата, я визуализирую соответствующий контент. На любой вкладке пользователь может делать разные вещи / изменения. Допустим, у меня есть вкладка ABC, которая при нажатии создает начальное представление, когда я снова нажимаю эту вкладку, когда она уже нажата, мне нужно повторно отобразить содержимое вкладок ABC.
По сути, то, что я хочу сделать, - это когда после нажатия кнопки test и test-demo один раз пользователь снова нажимает кнопку test, текст «test-demo» должен исчезнуть.
import React, { Component } from 'react';
const Button = (props) => {
return (
<button onClick = {() => props.onClick(props.buttonName.trim())}>{props.buttonName}</button>
);
};
class Test extends Component {
static initialState = () => ({
appContent:null,
});
state = Test.initialState();
switchTab = (buttonKey) => {
this.setState(prevState => ({
appContent:<a>{buttonKey}</a>
}));
}
render() {
let appContent = null;
switch(this.props.navigationTab) {
case "test":
appContent = <Button onClick = {this.switchTab} buttonName='test-demo' />
break;
default:
appContent = null
break;
};
return (
<div>
{appContent}
{this.state.appContent}
</div>
);
}
}
class AppContent extends Component {
render() {
return (
<div>
<Test navigationTab = {this.props.navigationTab}/>
</div>
);
}
}
class App extends Component {
static initialState = () => ({
navigationTab:null,
});
state = App.initialState();
switchTab = (buttonKey) => {
this.setState(prevState => ({
navigationTab:buttonKey,
}));
}
render() {
return (
<div>
<div>
<Button onClick = {this.switchTab} buttonName='test'/>
</div>
<AppContent navigationTab = {this.state.navigationTab} />
</div>
);
}
}
export default App;





https://stackblitz.com/edit/react-fs8u7o?embed=1&file=index.js
import React, { Component } from 'react';
import { render } from 'react-dom';
import Hello from './Hello';
import './style.css';
const Button = (props) => {
return (
<button onClick = {() => props.onClick(props.buttonName.trim())}>{props.buttonName}</button>
);
};
class Test extends Component {
constructor(props) {
super(props);
this.state = {
appContent: null,
hideTestDemo:false,
};
}
componentWillReceiveProps(nextProps){
this.setState(prevState => ({
hideTestDemo:nextProps.hideTestDemo,
}));
}
switchTab = (buttonKey) => {
this.setState(prevState => ({
appContent: <a>{buttonKey}</a>,
hideTestDemo:false,
}));
}
render() {
let appContent = null;
switch (this.props.navigationTab) {
case "test":
appContent = <Button onClick = {this.switchTab} buttonName='test-demo' />
break;
default:
appContent = null
break;
};
return (
<div>
{appContent}
{(!this.state.hideTestDemo ) ? this.state.appContent:null}
</div>
);
}
}
class AppContent extends Component {
render() {
return (
<div>
<Test {...this.props} />
</div>
);
}
}
class App extends Component {
constructor() {
super();
this.state = {
navigationTab: null,
};
}
hideTestDemo = false;
switchTab = (buttonKey) => {
if (this.hideTestDemo)
this.setState(prevState => ({
navigationTab: buttonKey,
hideTestDemo: true,
}));
else
this.setState(prevState => ({
navigationTab: buttonKey,
hideTestDemo:false,
}));
this.hideTestDemo=!this.hideTestDemo;
}
render() {
return (
<div>
<div>
<Button onClick = {this.switchTab} buttonName='test' />
</div>
<AppContent {...this.state} />
</div>
);
}
}
render(<App />, document.getElementById('root'));
если вы выполните эту последовательность щелчков - test-> test-demo> test, и теперь, если вы нажмете test-demo, текст test-demo не появится.
для этого вам нужно использовать developmentarc.gitbooks.io/react-indepth/content/life_cycle/….
используйте переменную say let showTestDemo: boolean = true; и изначально установите значение true, а в switchTab установите значение false