Я пытаюсь запустить анимацию в моем приложении to-do.list из значка onCLick, но получаю ошибку типа:
TypeError: Cannot read property 'startAnimation' of undefined
(anonymous function)
C:/Users/adm/Desktop/toDo-List/finalize/finalize/src/listitems.js:25
22 |
23 |
24 | <FontAwesomeIcon
> 25 | className="faicons" onClick={this.startAnimation}
| ^ 26 | onClick={() => {props.deleteItem(item.key)}}
27 |
28 |
View compiled
ListItems
C:/Users/adm/Desktop/toDo-List/finalize/finalize/src/listitems.js:11
8 |
9 | const items = props.items;
10 |
> 11 | const listitems = items.map(item =>
| ^ 12 | {
13 | return <div className ="list" key={item.key}>
14 | <p>
Это список элементов. js где " FontAwesomeIcon "onClick должен вызвать анимацию:
import React from 'react';
import './listitems.css'
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
import Ilotulitus from './Animation.js'
function ListItems(props){
const items = props.items;
const listitems = items.map(item =>
{
return <div className ="list" key={item.key}>
<p>
<input type="text"
id={item.key}
value={item.text}
onChange={(e)=>{
props.setUpdate(e.target.value,item.key)}}/>
<span>
<FontAwesomeIcon
className="faicons" onClick={this.startAnimation}
onClick={() => {props.deleteItem(item.key)}}
icon="trash" />
</span>
</p>
</div>
})
return(
<div>
{listitems}
</div>
)
}
export default ListItems;
Я определил функцию startAnimation в моем приложении. js, фактическая анимация находится в моем css -файле.
class App extends React.Component{
constructor(props){
super(props);
this.state={
items:[],
currentItem:{
text:'',
key:'',
classNames: ''}
}
this.handleInput = this.handleInput.bind(this);
this.addItem = this.addItem.bind(this);
this.deleteItem = this.deleteItem.bind(this);
this.setUpdate = this.setUpdate.bind(this);
this.startAnimation = this.startAnimation.bind(this);
}
startAnimation = () => {
const { classNames } = this.state;
this.setState({ classNames: "animation" });
};
handleInput(e) {
this.setState({
currentItem:{
text: e.target.value,
key: Date.now()
}
})
}
addItem(e){
e.preventDefault();
const newItem = this.state.currentItem;
console.log(newItem);
if(newItem.text!==""){
const newItems=[...this.state.items, newItem];
this.setState({
items:newItems,
currentItem:{
text:'',
key:''
}
})
}
}
deleteItem(key){
const filteredItems = this.state.items.filter(item =>
item.key!==key);
this.setState({
items: filteredItems
})
}
setUpdate(text,key){
console.log("items:"+this.state.items);
const items = this.state.items;
items.map(item=>{
if(item.key===key){
console.log(item.key +" "+key)
item.text= text;
}
})
this.setState({
items: items
})
}
render() {
return (
<div className="App">
<Hola />
<header>
<form id="to-do-form" onSubmit={this.addItem}>
<input type="text" placeholder="Enter text"
value={this.state.currentItem.text} onChange={this.handleInput}/>
<button type="submit">Add</button>
</form>
</header>
<ListItems items={this.state.items} deleteItem={this.deleteItem} setUpdate={this.setUpdate} startAnimation={this.startAnimation}/>
</div>
);
}
}
export default App
;
Функциональное назначение заключается в том, что после удаления пользователем элемента из приложения воспроизводится анимация. Должны ли состояния быть определены в списках. js также?