Как вызвать состояние из другого компонента в Reactjs

Привет, мир, мне нужна помощь с этим.

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

Примеры структуры приложения

  • Home.js
    • Компонент с индикатором выполнения (Компонент 1)
      • Компонент между ними (компонент 2)
        • Компонент, из которого я хочу вызвать индикатор выполнения (Компонент 3)
  • Компонент ProgressBar (ПрогрессБар)

Https://codesandbox.io/s/optimistic-stallman-rjxi9?file=/src/App.js

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

Я хочу выполнить onClick из Компонента 3, чтобы изменить состояние индикатора выполнения, которое находится в Компоненте 1, но между ними есть компонент, а также индикатор выполнения на собственном компоненте.

Я пробовал обычно передавать функцию новой функции в компоненте, из которого я хочу вызвать это действие (Компонент 3), и передать эту функцию кнопке. но выдает ошибку "Ошибка типа this.props.* не является функцией"

Заранее спасибо

Похоже, вы на правильном пути (передавая свою функцию обратного вызова вниз по дереву компонентов) — можете ли вы обновить свой пример, включив в него код, который у вас был, когда вы столкнулись с ошибкой типа this.props. * не является функцией? Звучит как правильный подход, но с ошибкой где-то при передаче или вызове функции.

smashed-potatoes 20.12.2020 23:46

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

Dev01 20.12.2020 23:57
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
Раскрытие чувствительных данных
Раскрытие чувствительных данных
Все внешние компоненты, рассмотренные здесь до сих пор, взаимодействуют с клиентской стороной. Однако, если они подвергаются атаке, они не...
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Эпизод 23/17: Twitter Space о будущем Angular, Tiny Conf
Мы провели Twitter Space, обсудив несколько проблем, связанных с последними дополнениями в Angular. Также прошла Angular Tiny Conf с 25 докладами.
Руководство ChatGPT по продаже мини JS-файлов
Руководство ChatGPT по продаже мини JS-файлов
JS-файл - это файл, содержащий код JavaScript. JavaScript - это язык программирования, который в основном используется для добавления интерактивности...
5
2
385
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

На данный момент вы создали функцию handleProgress в C1, но никогда не передавали ее в C2 и C3.

Чтобы передать его на C2 и C3, вам нужно удалить их из компонента App и переместить в C1.

Спасибо, но я не t get your answer, I assume they are children of Component 1 if you looked into the App.js? Isn разве это не то, что вы имеете в виду?

Dev01 20.12.2020 23:51

Я видел ваше решение, оно имеет смысл, но в моем случае, что, если я не могу удалить их из App.js

Dev01 20.12.2020 23:55

Затем вам нужно поднять состояние до приложения и сохранить прогресс в приложении. Коммуникация в React происходит вверх и вниз, а не горизонтально между компонентами (это возможно, но это некрасиво и пахнет кодом)

IvanD 20.12.2020 23:57

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

Dev01 21.12.2020 00:00

Вы просили исправить ваш код, который не работал, и я это сделал. То, что вы задаете, это другой вопрос. Пожалуйста, создайте новый вопрос, и коллективный разум Stack Overflow поможет вам :)

IvanD 21.12.2020 00:12

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

Dev01 21.12.2020 00:18

@ dev01, пожалуйста, примите мой ответ, если я вам помог :)

IvanD 21.12.2020 04:19

Давайте продолжим обсуждение в чате.

Dev01 21.12.2020 10:32

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