Состояние рендеринга в другом компоненте в reactjs

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

Здесь я инициализирую имя пользователя (App.js)

class App extends Component{
  constructor(props) {
    super(props);
    this.state = {
      logged_in: localStorage.getItem('token') ? true : false,
      username: ''
    };
  }
  componentDidMount() {
    if (this.state.logged_in) {
      fetch('http://localhost:8000/user/current_user/', {
        headers: {
          Authorization: `JWT ${localStorage.getItem('token')}`
        }
      })
        .then(res => res.json())
        .then(json => {
          this.setState({ username: json.username });
          console.info(json.username);
        });

    }
  }
  render() {
  return (
    <div className = "App">
      <Router history = {history}>
        <Switch>
          <Route exact path = "/" component = {First} />
          <Route path = "/home" component = {Projects} />
          <Route path = "/menu" component = {MenuH} />
          <Route path  = "/createProject" component = {CreateP} />
          <Route path  = "/connect" component = {Newacount} />
          <Route component = {Notfound} />
        </Switch>
      </Router>
    </div>
  );
  }
}
...

И вот как я это называю в другом компоненте (проектах)

{this.state.username}
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
0
249
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

У вашего компонента "Проекты" нет доступа к состоянию в App.

Вы должны сделать это с помощью менеджера состояний, такого как Реагировать на контекст или Редукс.

Это не сработает, вы не можете просто получить доступ к родительскому состоянию напрямую во всех дочерних компонентах, вы должны отправить родительское состояние дочерним компонентам в качестве поддержки для доступа к ним.

В подобном сценарии, когда вы хотите использовать одно состояние во всех ваших дочерних компонентах, хорошо использовать Redux, он предоставит вам глобальное состояние, которое будет доступно во всех ваших компонентах. Также вы можете решить эту проблему с помощью React Контекстный API.

Ответ принят как подходящий

Вот хорошее обсуждение Как передать компонент через реактивный маршрутизатор.

После обсуждения ваш код будет выглядеть так:

<div className = "App">
      <Router history = {history}>
        <Switch>
          <!-- Pass username as props here -->
          <Route path = "/your-route" render = {()=><Projects username = {this.state.username}/>} />
        </Switch>
      </Router>
</div>

И в свой компонент Projects вы извлекаете его с помощью this.props.username.

попробуйте отправить состояние в качестве реквизита для ребенка и получить к нему доступ от ребенка! или для прямого доступа к состоянию вы можете использовать редукционное хранилище или контекстный API из реакции!

<Route path = "/home" render = {()=><Home username = {this.state.username} />} />

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

Как отправить или передать состояние от братьев и сестер к братьям и сестрам в React Native?
Асинхронная выборка данных без повторного рендеринга данных ReactJS (или просто без отображения новых данных)
Почему метод splice удаляет только первый индекс массива в React?
Как отправить данные из диалога обратно в родительский контейнер с помощью реакции?
React Axios: иногда состояние не проходит по событию onClick
Заполнение свойств дочернего компонента без состояния из состояния родительского компонента для отображения вложенного неупорядоченного списка в React (с Firebase)
Ограничить состояние доставки при оформлении заказа в Woocommerce
Компонент таблицы не перерисовывается после обновления состояния
Почему набор переменных в области внешней подписки изменяется при изменении внутренних подписок
Как разделить динамический объект массивов между компонентами в ReactJS?