URL-адреса React-маршрутизатора не работают при обновлении или записи вручную

Правильный способ проверки наличия ключа массива - это функция array_key_exists()

. Разница в том, что когда вы имеете $_POST['variable'] = null, это означает, что ключ существует и отправляется, но значение равно null

Другим вариантом является isset(), который будет проверять, существует ли ключ массива, и если он был установлен

Последний параметр - использовать empty(), который будет проверять, существует ли ключ массива, если он установлен и если значение не считается пустым.

Примеры:

$arr = [
  'a' => null,
  'b' => '',
  'c' => 1
];

array_key_exists('a', $arr); // true
isset($arr['a']); // false
empty($arr['a']); // true


array_key_exists('b', $arr); // true
isset($arr['b']); // true
empty($arr['b']); // true


array_key_exists('c', $arr); // true
isset($arr['c']); // true
empty($arr['c']); // false

Что касается вашего вопроса

Правильный способ проверить, было ли отправлено значение, это использовать array_key_exists ( ) с проверкой метода запроса

if ($_SERVER['REQUEST_METHOD'] == 'POST' && array_key_exists('fromPerson', $_POST)    
{
   // logic
}

Но есть некоторые случаи, зависящие от вашей логики, где isset() и empty() также могут быть хорошими.

467
задан daaawx 9 April 2019 в 20:21
поделиться

3 ответа

Вот frontend обходное решение, я обнаружил, что это не требует изменения ничего на сервере.

Скажем, Вашим сайтом является mysite.com, и у Вас есть Реагировать Маршрут на mysite.com/about. В index.js, где Вы монтируете свой компонент верхнего уровня, можно поместить другой Маршрутизатор как:

ReactDOM.render(
<Router>
    <div>
        <Route exact path="/" component={Home} />
        <Route exact path="/about"
            render={(props) => <Home {...props} refreshRout={"/about"}/>}
        />
    </div>
</Router>,

я предполагаю, что Вам определили местоположение исходного Маршрутизатора где-нибудь ниже компонента верхнего уровня в виртуальном DOM. Также необходимо поймать URL в .urls при использовании Django как:

urlpatterns = [
       path('about/', views.index),
]

Это будет зависеть, на каком бэкенде Вы используете, как бы то ни было. Запрос mysite/about получит Вас в index.js (где Вы монтируете компонент верхнего уровня), где можно использовать опору рендеринга Маршрута, а не опору компонента, и передавать '/about' как опору к, в этом примере, Домашнем компоненте.

В Доме, в любом componentDidMount () или useEffect () рычаг, сделайте:

useEffect() {   
   //check that this.props.refreshRoute actually exists before executing the 
   //following line    
   this.props.history.replace(this.props.refreshRoute);
}

я предположил, что Ваш Домашний компонент представляет что-то как:

<Router>
   <Route exact path="/" component={SomeComponent} />
   <Route path="/about" component={AboutComponent} />
</Router>

Кредит к ( опоры Передачи к компоненту, представленному, Реагируют Маршрутизатор ) для того, как передать опоры компонентам в Маршрутах.

0
ответ дан 22 November 2019 в 22:25
поделиться

можно попытаться читать это все, хотя это не является моим:

https://www.andreasreiterer.at/fix-browserrouter-on-apache /

Фиксация app’s, направляющего Теперь here’s, как наконец зафиксировать маршрутизацию. Чтобы сказать Apache перенаправлять запросы к index.html, где наше приложение живет, мы должны изменить .htaccess файл. Если еще нет такого файла в Вашей app’s папке, просто создайте ее.

Затем быть уверенным, что Вы вставляете те 4 строки, которые волшебно сделают Вашу работу маршрутизации.

опции-MultiViews RewriteEngine На % RewriteCond {REQUEST_FILENAME}!-f RewriteRule ^ index.html [QSA, L] После того, как мы поместим это .htaccess файл в тот же каталог как index.html, Apache, перенаправит каждый новый запрос непосредственно к Вашему приложению.

Премия: Развертывание Реагировать приложение к подкаталогу

, Если you’re, развертывающий Ваше приложение в подкаталог, таким образом, it’s доступный, например, через https://myapp.com/the-app, you’ll скоро, замечают, что существует другая проблема. Каждый щелчок к новому маршруту преобразует URL к чему-то как https://myapp.com/route-abc †“, который повредится снова после перезагрузки. Но существует простая фиксация для этого:

BrowserRouter имеет опору, названную базовым именем, где можно указать путь подкаталога:

С этого времени, каждый Маршрут как контакты / приведет к URL как http://myapp.com/the-app/contacts .

0
ответ дан 22 November 2019 в 22:25
поделиться

Мы использовали 404 подхода обработки экспресса

// path to the static react build directory    
const frontend = path.join(__dirname, 'react-app/build');

// map the requests to the static react build directory
app.use('/', express.static(frontend));

// all the unknown requests are redirected to the react SPA
app.use(function (req, res, next) {
    res.sendFile(path.join(frontend, 'index.html'));
});

Работы как очарование. Живая демонстрация наш сайт

0
ответ дан 22 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: