Ваш первый порт вызова должен быть документацией , который объясняет это разумно ясно:
Брошено, чтобы указать, что к массиву был обращен незаконный индекс. Индекс является либо отрицательным, либо большим или равным размеру массива.
Так, например:
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++)
(Предполагается, что вы нуждаетесь в индексе, конечно. Если вы можете использовать расширенный для цикла, сделайте это.)
Если вы пытаетесь использовать что-то вроде:
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
Вы можете использовать эту функцию для доступа к параметрам 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));
. Что, если вы попытаетесь обернуть свой компонент класса 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);