Повторно визуализировать компонент при повторном щелчке по той же вкладке в другом компоненте

Я знаю, что название может сбивать с толку, а также может звучать как повторение, пожалуйста, прочтите все описание, прежде чем отмечать его как повторяющееся, я новичок, чтобы отреагировать и мне нужна помощь.

Я создаю приборную панель. У меня есть 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;

используйте переменную say let showTestDemo: boolean = true; и изначально установите значение true, а в switchTab установите значение false

Apoorva Jhanwer 15.07.2018 14:59
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
532
1

Ответы 1

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 не появится.

Gagan Goel 16.07.2018 15:51

для этого вам нужно использовать developmentarc.gitbooks.io/react-indepth/content/life_cycle/‌….

Apoorva Jhanwer 17.07.2018 07:48

Другие вопросы по теме