Обновить реагировать контекста от детей или изменить структуру компонентов? - PullRequest
0 голосов
/ 27 октября 2019

Этот вопрос посвящен компоненту заголовка:
Так в моем приложении. У меня есть что-то похожее на это с несколькими дополнительными компонентами и большим количеством маршрутов:

return (
        <SiteLayoutContext.Provider value={siteConfiguration} >
            <div className="topContainer">

                <BrowserRouter>
                    <div className="header">
                        <Header/>
                    </div>

                    <div className="mainWrapperContainer">
                        <div className="contentWrapper">

                            <Route exact path='/login' component={Login}/>
                            <Route exact path='/home' component={Home}/>
                            <Route exact path='/about' component={About}/>
                            <Route exact path='/collection/:collectionName' component={CollectionLandingPage}/>
                            <Route exact path='collection/:collectionAlias/id/:itemId' component={ItemView}/>
                        </div>
                        <Footer/>
                    </div>
                </BrowserRouter>
            </div>

        </SiteLayoutContext.Provider>
    )

Чего я хотел бы достичь:
Я могу сейчас установитьлоготип для заголовка.
Это замечательно, но я бы хотел, чтобы пользователь мог выбрать собственный логотип, который заменит глобальный по умолчанию, если они в коллекции.
Чтобы определить «внутри» коллекции , маршрут будет начинаться с /collection/, поэтому в приведенном ниже примере как ItemView, так и CollectionLandingPage должны иметь этот собственный логотип.


Мне нужно иметь возможность сообщить моему заголовку, что он в настоящее время находится в коллекции, и я хочу ограничить рендеринг и перерисовку для повышения производительности. У меня есть конечная точка API, которую я получаю, чтобы получить информацию о коллекции, которая сообщит мне, был ли установлен пользовательский логотип, и каков должен быть href.

То, что я пробовал:
Первоначально я хотел вырвать заголовок из основного return(), показанного выше, и вместо этого поместить его в каждый компонент таким образом, чтобы яможно использовать крючок React useLocation() для проверки URL и извлекать логотип коллекции, только если
1) мы находимся в коллекции и
2) установлен собственный логотип.

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

Моя вторая мысль - обернуть все это в некоторый контекст , используйте его в каждом компоненте и обновите его на основе URL-адреса, который затем извлечет соответствующую информацию, но при этом он просто чувствует off . Я полагаю, я мог бы получить информацию для коллекции и обновлять новый CollectionInfoContext каждый раз, когда я нажимаю /collection/:collectionName, который обновляется только при изменении collectionName?

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

Отказ от ответственности: я реагирую на контекст api новичок

1 Ответ

0 голосов
/ 27 октября 2019

Если вы не используете Redux или другое решение для управления состоянием, контекст, безусловно, является разумным способом обмена данными между приложениями, темы пользовательского интерфейса на самом деле являются одним из рекомендуемых вариантов использования в документации React. .

Единственная проблема, которую я мог видеть, заключается в том, что изменение состояния только для определенных компонентов потребует способа сброса контекста для других мест, где вам просто нужен стандартный логотип. Но чтение URL-адреса может решить эту проблему, просто сохраняя имя пути и используя его внутри Header для визуализации пользовательского логотипа, если путь включает collections. Если Header может прочитать имя пути самостоятельно, вам может даже не понадобиться контекст, если это единственное условие, которое везде динамично.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...