Я написал этот код и создал метод конструктора
constructor(props) {
super(props)
this._addTodo = this._addTodo.bind(this);
this._searchBar = this._searchBar.bind(this);
this._removeTodo = this._removeTodo.bind(this);
}тогда эта функция:
_addTodo() {
var data = test.map(x => [x.name, x.price, ]);
var searchField = $('.objectName').val();
data.map(function(theTrue) {
if (searchField === theTrue[0])
{
$('.objects')
.append('<div class = "box"> <i className = "hvhv">' + $('.quantityObject').val() + ' </i><i> ' + $('.objectName').val() + ' </i><i> ' + $('.priceValue').text() + '</i><button onClick = {this._removeTodo()} className = "removeTodo">Remove</button></div>');
}
})
}когда я вызываю эту функцию, все идет нормально
<button className = "addItem" onClick = {this._addTodo}>Add</button>
но когда я вызвал эту функцию:
_removeTodo(){
console.info('work');
$( ".box" ).remove();
}
Это написано :
Uncaught TypeError: this._removeTodo is not a function at HTMLButtonElement.onclick ((index):1) onclick @ (index):1
@zerkms Так как я могу это исправить?
Вы не можете это исправить, вам нужно переопределить его с нуля с помощью React (если вы должны использовать реакцию).
@zerkms прав. использование jQuery в React полностью разрушает цель. Весь этот элемент div в функции карты может быть реализован в более чистом формате: D



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Reactjs использует виртуальный дом, это создает дерево объектов на основе jsx и визуализирует в пользовательском интерфейсе. Здесь совершенно не предлагается манипулирование DOM с использованием jQuery. Если вы хотите отображать данные на основе условия, сделайте это для объектов reactjs, таких как состояние или реквизиты, не пытайтесь удалить элемент с помощью jQuery.
Вот пример того, как добавлять и удалять элемент, используя только Reactjs.
class App extends Component {
state = {
todo: [],
name: '',
quantity: '',
price: '',
}
constructor(props) {
super(props)
this._addTodo = this._addTodo.bind(this);
this._removeTodo = this._removeTodo.bind(this);
}
_addTodo(e) {
e.preventDefault()
const { todo, name, quantity, price } = this.state
const newTodo = {
name,
quantity,
price,
id: Date.now(),
}
this.setState({
todo: [...todo, newTodo],
})
}
_removeTodo(item) {
const { todo } = this.state
let index
index = todo.findIndex(x => x.id === item.id)
todo.splice(index, 1)
this.setState({
todo,
})
}
render() {
return (
<div>
<form onSubmit = {this._addTodo}>
<input type = "text" placeholder = "Name" value = {this.state.name} onChange = {e => this.setState({name: e.target.value})} />
<input type = "text" placeholder = "Quantity" value = {this.state.quantity} onChange = {e => this.setState({quantity: e.target.value})} />
<input type = "text" placeholder = "Price" value = {this.state.price} onChange = {e => this.setState({price: e.target.value})} />
<button type = "submit" onClick = {this._addTodo}>Add</button>
</form>
<hr />
<div>
{this.state.todo.map(item => (
<div className = "box">
<i className = "hvhv">{item.quantity}</i>
<i> {item.name} </i>
<i>{item.price}</i>
<button type = "button" onClick = {() => this._removeTodo(item)} className = "removeTodo">Remove</button>
</div>
))}
</div>
</div>
)
}
}
Вы либо используете jquery для управления DOM, либо React, но не то и другое вместе. Я не говорю, что их нельзя использовать вместе, но используя их вместе: 1. Смущает новичков. 2. Это признак того, что что-то делается очень-очень неправильно.