#reactjs #components
#reactjs #Компоненты
Вопрос:
Я опытный разработчик react, но я не знаю ответа на этот вопрос. В интервью мне задают этот вопрос.
передавать данные между двумя независимыми компонентами без использования context api или redux?
кто-нибудь может дать мне ответ?
Комментарии:
1. Пожалуйста, укажите больше контекста, «два независимых компонента» — они имеют одного и того же родителя? «Без redux или контекста» — redux использует контекст. У вас есть пример кода?
2. В интервью они задают мне этот вопрос, не зависящий друг от друга
3. Каков был ваш ответ? Как говорится, «передача реквизитов» слишком очевидна.
4. Я сказал, что мы можем проходить через параметры url или через локальное хранилище, но он сказал, что это неправильный подход, поэтому я подумал спросить об этом, может быть, есть что-то еще, чего я не знаю
5. Вы передаете данные как реквизиты от общего родителя, не нужно переусердствовать.
Ответ №1:
На самом деле это одна из первых вещей, которые нужно изучить в React. Вы сохраняете данные в компоненте, который является родительским для двух независимых компонентов, и передаете им данные в качестве реквизита.
Во всех приложениях react обычно есть корневой компонент App.js таким образом, все компоненты react имеют общего родителя в какой-то точке дерева.
Проверьте состояние подъема в документах.
Комментарии:
1. ваш ответ имеет смысл, но это не тот ответ, который он ожидал, я также дал ему этот ответ, кстати, я нашел эту статью pluralsight.com/guides /…
2. Я думаю, вам также следует задать вопрос своему интервьюеру и спросить его, зачем вам нужен надуманный ответ на довольно простую проблему. В статье, на которую вы ссылались, буквально говорится, что это необычно.
Ответ №2:
Это сложный вопрос.
- Бурение реквизита — правильный ответ, но слишком очевидный.
- Redux использует Context API для передачи своего хранилища и перехватов, поэтому вы в основном спрашиваете, как передавать данные без Context API и через props.
Допустим, у нас есть значение, которое мы хотим передать из компонента A в B.
Основная проблема в этом вопросе заключается в том, как уведомить компонент B о том, что ему нужно прочитать значение.
Ответы типа «использовать локальное хранилище», «читать параметры url» и просто «извлекать значения с удаленного сервера» частично верны, поскольку они не решают указанную проблему.
Поэтому решение похоже на то, что делает MobX.
Передаваемое значение должно быть глобальным для приложения (как шаблон подписки или наблюдаемые) и уведомлять компонент о рендеринге себя ( forceRender
) при изменении значения, затем считывать глобальное значение.
Комментарии:
1. Почему правильный ответ, неправильный, потому что он слишком очевиден? Мне кажется, это излишне сложный ответ на довольно простую проблему. Это рекомендуемый способ в документах или какой-либо большой кодовой базе? React уже делает это за вас, вот почему вы используете фреймворк в первую очередь.
2. Прочитайте ссылку на детализацию реквизита.
3. Я уже читал эту статью раньше, на что бы вы хотели обратить внимание?
4. «Почему правильный ответ, неправильный, потому что он слишком очевиден», хотя вы определенно всегда можете выполнить сверление реквизита, это анти-шаблон. Я думаю, что это справедливый вопрос, и я бы исправил его на «как передавать данные без Context API и через props»
5. Этот «антишаблон» является распространенным шаблоном, встречающимся во многих кодовых базах, и команда react core рекомендует его в качестве первого варианта решения, прежде чем использовать какие-либо библиотеки управления состоянием.
It can be an anti-pattern !== it is an anti-pattern
. Вопрос прямолинейный, не нужно делать предположений или переоценивать это IMO.