Не удается прочитать свойство params из строки запроса?

Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:

Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.

Так, например:

int[] array = new int[5];
int boom = array[10]; // Throws the exception

Как избежать этого. ., не делайте этого. Будьте осторожны с вашими индексами массива.

Одной из проблем, с которыми иногда сталкиваются люди, является то, что массивы 1-индексируются, например

int[] array = new int[5];
// ... populate the array here ...
for (int index = 1; index <= array.length; index++)
{
    System.out.println(array[index]);
}

Это пропустит первый элемент (индекс 0 ) и выдают исключение, когда индекс равен 5. Действующие индексы здесь 0-4 включительно. Правильный, идиоматический оператор for здесь будет:

for (int index = 0; index < array.length; index++)

(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)

1
задан Mike K 16 January 2019 в 13:51
поделиться

3 ответа

Если вы пытаетесь использовать что-то вроде:

http://myapp/page?city=Toronto

Тогда this.props.match.params.city не будет работать. Причина в том, что сценарий использования match.params.city должен быть в маршрутах.

import { Route } from "react-router-dom";

<Route path="/path/:city" component={App} />

В своем методе жизненного цикла componentDidMount() попробуйте использовать:

const urlParams = new URLSearchParams(window.location.search);
let city = urlParams.get('city');

Для вышеприведенного кода взгляните на Как получить значения строки запроса в JavaScript? [119 ] В вашем коде, если вы попытаетесь записать значение city, это может быть undefined, если вы не настроили свой маршрут таким образом.

Пример кода

class App extends React.Component {
  state = {
    city: "None"
  };
  componentDidMount() {
    const urlParams = new URLSearchParams(window.location.search);
    let city = urlParams.get("city");
    this.setState({
      city
    });
    console.log(city);
  }
  render() {
    return (
      <div className="App">
        <h1>Hello CodeSandbox</h1>
        <h2>Start editing to see some magic happen!</h2>
        <h3>You are in {this.state.city}!</h3>
      </div>
    );
  }
}

Рабочая демонстрация: CodeSandbox

0
ответ дан Praveen Kumar Purushothaman 16 January 2019 в 13:51
поделиться

Вы можете использовать эту функцию для доступа к параметрам URL

var getParams = function (url) {   
    var params = {};
    var parser = document.createElement('a');
    parser.href = url;
    var query = parser.search.substring(1);
    var vars = query.split('&');
    if(vars == ''){
        params = '';
        return params;
    }
    for (var i = 0; i < vars.length; i++) {
        var pair = vars[i].split('=');
        params[pair[0]] = decodeURIComponent(pair[1]);
    }
    return params;
};

и вызова его

console.log(getParams(window.location.href));
.
0
ответ дан Wushu06 16 January 2019 в 13:51
поделиться

Что, если вы попытаетесь обернуть свой компонент класса App в withRouter? Итак, это будет выглядеть следующим образом:

import React, { Component } from "react";
import { withRouter } from 'react-router-dom';
import Spinner from "./components/common/Spinner";

class App extends Component {
  //....
}

export default withRouter(App);
0
ответ дан Bayu 16 January 2019 в 13:51
поделиться
Другие вопросы по тегам:

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