На методе onClick я не могу использовать .push дважды - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь просмотреть список сотрудников, и когда я нажимаю кнопку, он добавляет идентификатор сотрудника в массив. Я пытаюсь сделать это с помощью метода .push для массива, но он работает только один раз, а затем, когда я пытаюсь нажать кнопку для следующего сотрудника, он говорит, что .push не является функцией.

constructor(props:any){
    super(props);
    this.state={
        employees:[{name: 'joe', id: 12345},{name: 'kelly', id: 12321},{name: 'Jessica', id: 12255},{name: 'Paul', id: 98798}],
        ids:[],
        badgeID: '',
        currentEmployee: null
    }
}


check = () => {
    const {ids, badgeID, employees} = this.state

    let filteredEmployee = employees.filter(employee => {
        return employee.id === Number(badgeID)
    })

    this.setState({
        currentEmployee: filteredEmployee,
        drinkModal: true,
        ids: ids.push(badgeID)
    })
    console.log('ids', this.state.ids)
}


handleChange = (e: any, type: string) => {
    if(type === 'badge'){
        this.setState({badgeID: e.target.value})
    }
}

render(){
    return(
        <TextField onChange={e => this.handleChange(e, 'badge')}/>
        <Button onClick={this.check}>Add Employee</Button>
)}

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Это потому, что ids.push возвращает длину нового массива: проверьте документы

Обычно вы устанавливаете ids целочисленное значение.

0 голосов
/ 01 мая 2018

Вы делаете:

ids: ids.push(badgeID)

При этом сохраняется возвращаемое значение метода push, который не является массивом, поэтому при следующем вызове push он потерпит неудачу. Вместо этого вам нужно сделать что-то вроде:

ids: [...ids, badgeID]

или:

ids: ids.concat([badgeId])
...