#javascript #reactjs
#javascript #reactjs
Вопрос:
Мне удалось создать приложение React, которое возвращает новую цитату без повторения, но теперь пользовательский интерфейс исчезает при достаточном количестве событий нажатия. Почему мой код делает это? При этом в консоли я получаю сообщение об ошибке объекта.
class QuoteMachine extends React.Component{
constructor(props){
super(props);
this.state = {
quote: fullQuote,
}
this.handleClick = this.handleClick.bind(this);
}
handleClick(){
let copy = this.props.quotes.slice();
let index = Math.floor(Math.random() * copy.length);
this.setState(function(prevState,props){
if(prevState.quote != copy[index]){
return {quote: copy[index]}
}return {
quote: copy[index 1]}
})
}
render(){
const quote = this.state.quote[0];
const author = this.state.quote[1];
return (
<div id='quote-box'>
<div id='text'><h1> <div>{quote}</div> </h1></div>
<div id='author'><h3> <div>{author}</div> </h3></div>
<button onClick={this.handleClick} id='new-quote'>New Quote</button>
<a id='tweet-quote' href="https://twitter.com/intent/tweet">Tweet Me</a>
</div>
)
}
}
const QUOTES = [
["Stay Hungry. Stay Foolish.", "Steve Jobs"],
["Good Artists Copy, Great Artists Steal.", "Pablo Picasso"],
["Argue with idiots, and you become an idiot.", "Paul Graham"],
["Be yourself; everyone else is already taken.", "Oscar Wilde"],
["Simplicity is the ultimate sophistication.", "Leonardo Da Vinci"]
];
const fullQuote = QUOTES[Math.floor(Math.random() * QUOTES.length)]
ReactDOM.render(<QuoteMachine quotes={QUOTES} />,
document.getElementById('node'))
Комментарии:
1. Можете ли вы указать фактическую ошибку, которую вы получаете?
2. Конечно, в консоли регистрируется: [ошибка объекта] {}
Ответ №1:
Это потому, что ваш индекс отсутствует в массиве copy
?
Комментарии:
1. Извините, я не понимаю вашего вопроса. Можете ли вы уточнить?
2. давайте предположим, что
copy.length
равно 10, а затемlet index = Math.floor(Math.random() * copy.length);
. Здесьindex
может быть 9, аindex 1
равно 10. так чтоcopy[10]
находится вне зоны действия.3. О, вау, в этом есть большой смысл. Я продолжу работать над этим и дам вам знать.
4. Я думаю, вы попали прямо в точку. Запись в журнал консоли
index
показывает индекс вне диапазонаcopy.length
.5.
index = Math.floor(Math.random() * copy.length?-1: 1);console.log(index) return { quote: copy[index]} })
тоже не помогает. Есть предложения?