Я новичок в React и изучаю события клика. Но проблема, с которой я столкнулся, заключается в том, что одним нажатием кнопки я получаю «Cannot GET / [object% 20Object]». Вот код, который я использую:
class Engine extends React.Component {
render() {
let types = ["Diesel", "Gazoline"];
return (
<div>
<Car type={types} />
</div>
);
}
}
class Car extends React.Component {
open() {
console.log("You have clicked");
}
render() {
return (
<div>
<h1>
{this.props.type.map((item, index) => {
return <p key={index}>{item}</p>;
})}
</h1>
<button onClick={open}>Remove all</button>
</div>
);
}
}
const box = document.querySelector(".mir");
ReactDOM.render(<Engine />, box);
2 ответа
Вам нужно использовать this.open
, поскольку он не знает точно, на что вы ссылаетесь open
:
<button onClick={this.open}>Remove all</button>
Если бы вы назвали функцию, скажем, foo
вместо open
, то она бы вообще не работала.
Причина, по которой вы видите эту функциональность, заключается в том, что она использует команду open
по умолчанию встроенный в JavaScript, который открывает новую страницу. Под капотом нажатие кнопки вызывает open(e)
, где e
- событие кнопки. Поэтому он пытается открыть новую страницу, но вместо того, чтобы получить URL, он получает object
, и, таким образом, вы видите полученную ошибку.
Вместо этого вы хотите использовать open
, определенный в классе. Для этого вам нужно использовать this.open
.
Кроме того, если вы хотите передать что-то в функцию в качестве аргумента, вам нужно немного его изменить.
Вы можете изменить open
на:
open = (myparam) => {
console.log("You have clicked");
console.log(myparam);
}
Чтобы связать this
. Тогда вы можете сделать что-то вроде:
<button onClick={_ => this.open("foo")}>Remove all</button>
Вам необходимо привязать функцию open к компоненту, а также вызвать ее с помощью this. Или вы можете сделать функцию стрелки.
<button onClick={this.open.bind(this)}
Или
open = () => { ... }
<button onClick={this.open}
Похожие вопросы
Связанные вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.