Сергей Сунцев, Так я и не просил написать мне полное решение в виде готового приложения. Я хотел лишь получить помощь в написании непонятных для меня отдельных элементов данного ТРЕНИРОВОЧНОГО (а не коммерческого) мини-приложения. На часть вопросов вы дали достаточно конкретный и развернутый ответ, но в самой главной части вопроса - вывод полной инфы по клику - только общие рекомендации - "При клике отправляете в setActiveUser целиком item". И тут не ясно - каким образом отправить (как это может ориентировочно выглядеть), в каком элементе должен присутствовать данный экшн-крийэтор и каким образом он вызовет рендер компонента с полной информацией. Я там попытался что-то сделать в рамках данной рекомендации, но что-то, видимо, не так, раз выбивает ошибку
Ответ ОДНОЗНАЧНО помог, за что я искренне благодарен, только ведь задачу-то я до сих пор не решил. Как незавершенную задачу отмечать решением? Мне бы хотелось довести ее до конца и оставить здесь ссылку на ее код с решением, чтобы и другим, столкнувшимся с подобными проблемами людям это помогло, чтобы был какой-то референс на рабочее решение, а не черновик с ошибками. Почему нельзя, как на stackoverflow давать ГОТОВЫЕ решения, а не просто намеки и советы общего плана? Ведь не целый же онлайн-шоп, готовый в продашн нужно написать, а всего лишь тренировочное мини-приложение, типа того же TODOLIST-а
Сергей Сунцев, Эта задача уже больше года назад была моим тестовым заданием и на данный момент это тестовое задание не актуально. Просто я сам для себя захотел его все же сделать, потому что здесь реализуются ряд нужных в дальнейшей разработке вещей и элементы этого задания можно будет в будущем использовать как gists. Именно поэтому я так озадачился и прошу помощи с решением, потому что самостоятельно у меня никак не выходит с этой задачей справиться, а все прочие эксперты, к кому я обращался, ограничиваются лишь общими намеками, которые меня еще больше сбивают с толку. С джаваскриптом я хорошо знаком, да и реакт для меня не в новинку - уже доки прошерстил вдоль и поперек в поисках нужных решений. Так что знания есть, только практики не хватает, а постоянные фейлы с поиском решений лишь деморализуют. А так хотелось бы сделать рывок, а не топтаться на месте...
Сергей Сунцев, Спасибо большое за развернутый ответ - сразу многое прояснилось, правда, проявились и новые вопросы.
С вашего ответа я не понял КАК ИМЕННО получать список пользователей. Если не через импорт в компоненте App.js, то как еще? Используя redux-thunk фетчить данные в экшн-криэйтере или как-то по-другому их пробрасывать в стор? Если таки фетчить, то где размещать data.json - в папке src, где он и сейчас находится, или в public выносить? А если так, то как должен выглядеть урл запроса?
И как ориентировочно реализовать "в четвертых"? Через санку в экшн-криэйтере post-запросом или через setState/useSelector/useReducer в самом компоненте? И как этот item выглядит? Перебор массива мэпом, где item - аргумент коллбэка или как-то еще?
Сергей Сунцев, Огромное спасибо за уже оказанную помощь и все же - могли бы вы как-то сориентировать КАК ИМЕННО вычленить из общего списка "кликнутого" клиента? В общих чертах я понимаю, что нужно создать новый массив, куда пушить данные "кликнутого" юзера, только вот как это практически реализуется - никак не пойму.
И с селекторами я что-то запутался - почему-то они не хотят доставать данные из стора. Может глянете на код, что именно там не так, из-за чего выбивает ошибки?
Сергей Сунцев, Как-то вы все сложно завернули с immutable.js. Я пока что не знаком с данной библиотекой и потому возникли сложности с пониманием особенностей ее применения.
И потому непонятно, как этот immutable скомбинировать с reselect-ом
И еще непонятно каким образом при клике на клиента добавлять в поле "активный клиент" объект из списка всех клиентов и отображать по нему инфу? Это для меня и был основной "головняк", из-за чего я и обратился за помощью..
И еще я никак не разберусь, как вычленить из всего списка именно "кликнутого" клиента. И где это делать - в mapStateToProps или в селекторе? Или вообще как-то через пропсы в отдельный компонент?
Просто я пока что решил набросать рабочую реализацию на чистом реакте, а потом перевести все на ридакс. И еще проблема в том, что я нигде не могу найти реализацию похожей задачи на ридаксе, вот и не знаю как спланировать алгоритм решения/
И еще - из вашего ответа я не понял, в каком виде добавлять указанные вами поля в store. Это что - импортировать содержимое data.json в initialState в редьюсере, а активного клиента также задать значением null в initialState? не могли бы вы в общих чертах набросать вид редьюсера?
Александр Зачиналов, А разве аякс запросом можно получать локальные данные с диска? Насколько я понял, аякс получает данные с сервера по пути типа https://name.com/data.json и т.п. А как тогда получить данные по пути типа "./js/data.json"? У меня чет ничего не выходит
Спасибо большое! Решение, конечно, хорошее. Но это для случая, когда в итоговом билде нужно просто получить HTML с вставленными данными. Только вот хотелось бы получить в итоге своего рода сервис, получающий данные с json, но работающий уже без галпа на обычном хостинге
Это вообще возможно сделать так, чтобы в скомпилированном билде получался HTML с javascript-ом, где есть обработчик data.json файла?
Антон Спирин, А можно все это показать на действующем примере, в sandbox? А то вы тут применили библиотеку reselect, а я с ней пока что не разобрался. Я вставил то, что вы тут написали в свой пример, только вот ничего не работает. Вроде и все зависимости стоят и импорт прописан, а выбивает ошибки
С праздником Пасхи вас!
А по примеру - понятно, что НИЧЕГО НЕ ПОНЯТНО. .. А где тут Redux? Вы просто слегка упростили исходный вариант, а как тут задействовать редьюсеры и экшены - непонятно. Вот я набросал свой пример на основе исходника. Могли бы вы там, на sandbox, набросать ваш вариант работы не с faker-ом, а с моим файлом clients.json (создать свой форк моего примера)? Вот ссылочка на мой вариант https://codesandbox.io/s/mj7w9klz7j
Просто хотелось бы получить чисто REDUX-версию данного примера
Роман Султанов, Понятно, что НИЧЕГО не понятно. Если не хотите помочь - ради Бога, я не навязываюсь, только вот зачем издеваться? Я попросил помочь с решением проблемы с извлечением данных ИМЕННО из моего .json файла,а не с внешнего API, по причине его нестандартной структуры. Потому что НИГДЕ не нашел способа извлечения данных именно из файла такой структуры, как у меня. Там наверняка проблема пустяковая с точки зрения профессионального разраба, а для меня - тупик ибо ни в каких доках я решения не нашел. Так что если у вас нет решения, лучше вообще не отвечайте
Роман Султанов, Можно еще маленькое уточнение? Вы сделали свой пример на randomuser, где основной массив данных имеет глобальный ключ results, а в моем примере массив (clients.json) идет БЕЗ КЛЮЧА и данные почему-то не хотят выводиться. Получается, что со сторонним API все работает, а мой злополучный файл так и не хочет парситься. Может там в FETCH что-то еще указать нужно?
Вот я то и хотел узнать, КАК правильно сделать и ЧЕГО ИМЕННО не хватает. Я ж только учусь и не хотелось бы изобретать велосипед, если где-то есть хорошие практики решения подобных задач. И насчет того, что функция НИЧЕГО не возвращает - в том-то и вопрос, КАК сделать, чтобы она выводила данные из clients.json?