Как проверить переменную пути с response-router-dom - PullRequest
0 голосов
/ 31 января 2019

Я определяю маршруты для проекта React так, чтобы URL выглядел как http://something.com/en-us/home или http://something.com/fr-ca/home, выполняя:

<Route path="/:language/home" render={() => <Home/>}/>

При планировании делагде переменная пути ": language" не является реальным языком (т. е. перенаправляет http://something.com/xyz/home на http://something.com/en-us/home), Я изначально вызывал метод setDefaultLanguage в componentDidMount, который был предназначен для обновления страницыс языковым кодом браузера. Вместо этого этот метод обновляет страницу при каждом монтировании.

checkLangInMasterList(code) {
    let index = Object.keys(langMasterList).indexOf(code);
    // langMasterList is a JSON file with codes for 15
    // languages that the website will be offered in

    return index === -1 ? false : true;
}

setDefaultLanguage() {
    let browserLanguage = navigator.language || navigator.browserLanguage;
    let pathnames = window.location.pathname.split("/");
    // i.e. pathnames would look like
    // ["", "xyz", "home"]

    if (checkLangInMasterList(pathnames[1]) !== -1) {
        return;
    } else if (checkLangInMasterList(browserLanguage) === -1) {
        window.location = `/en-us/${pathnames[2]}`;
    } else if (
        checkLangInMasterList(pathnames[1]) === -1 &&
        checkLangInMasterList(browserLanguage) !== -1
    ) {
        window.location = `/${browserLanguage}/${pathnames[2]}`;
    }
}

Если код языка браузера не существует (вообще или в списке разрешенных языков), какправильно ли обрабатывать перенаправление на язык браузера пользователя (если поддерживается в нашем списке) или на en-us?

1 Ответ

0 голосов
/ 31 января 2019

Ваш checkLangInMasterList возвращает логическое значение не -1.Ваш код должен выглядеть следующим образом:

if (!checkLangInMasterList(pathnames[1])) {
    // do stuff here
}

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

Итак, в соответствии с логикой, которую вы хотите здесь, это так и будетвыглядеть так:

if (checkLangInMasterList(pathnames[1]) {
    return
}
if (checkLangInMasterList(browserLanguage) {
    window.location = `/${browserLanguage}/${pathnames[2]}`
} else {
    window.location = `/${en-us}/${pathnames[2]}`
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...