Как добавить объект в массив объектов в react?

71
06 февраля 2022, 07:20

Как добавить объект в массив объектов в react?

import React, {Component} from 'react';
import './App.css';
import Car from './Car/Car'
class App extends Component {
    constructor(props) {
        super(props);
        this.state = {
            cars: [
                {name: 'Ford', year: 2018},
                {name: 'Audi', year: 2016},
                {name: 'Mazda', year: 2010}
            ],
            pageTitle: 'React components',
            showCars: false,
            newCar: {}
        }
    }

    toggleCarsHandler = () => {
        this.setState({
            showCars: !this.state.showCars
        })
    }
    onChangeName(name, index) {
        const car = this.state.cars[index]
        car.name = name
        const cars = [...this.state.cars]
        cars[index] = car
        this.setState({cars})
    }
    deleteHandler(index) {
        const cars = this.state.cars.concat()
        cars.splice(index, 1)
        this.setState({cars})
    }
    render() {
        const divStyle = {
            textAlign: 'center'
        }
        let cars = null
        if (this.state.showCars) {
            cars = this.state.cars.map((car, index) => {
                return (
                    <Car
                        key={index}
                        name={car.name}
                        year={car.year}
                        onDelete={this.deleteHandler.bind(this, index)}
                        onChangeName={event => this.onChangeName(event.target.value, index)}
                    />
                )
            })
        }
        return (
        <div style={divStyle}>
            <h1>{this.props.title}</h1>
            <button
                onClick={this.toggleCarsHandler}
            >Toggle cars
            </button>
            <input type="text" placeholder={"name"}/>
            <input type="text" placeholder={"year"}/>
            <div style={{
                width: 400,
                margin: 'auto',
                paddingTop: '20px'
            }}>
                {cars}
            </div>
        </div>
       );
    }
}
export default App;

Поля этого объекта вводит пользователь через input. Есть пример с удалением и апдейтом объектов из state. Помогите с добавлением.

import React from 'react'
import Radium from "radium";
import './Car.css'
const Car =  props => {
    const inputClasses = ['input']
    if (props.name !== '') {
        inputClasses.push('green')
    }
    else {
        inputClasses.push('red')
    }
    if(props.name.length > 4){
        inputClasses.push('bold')
    }
    const style = {
        border: "1px solid #ccc",
        ':hover': {
            border: "1px solid #aaa"
        },
        ':first-child': {
            background: 'red'
        }
    }
    return (
        <div className="Car" style={style}>
            <h3>Сar name: {props.name}</h3>
            <p>Year: <strong>{props.year}</strong></p>
            <input type="text" onChange={props.onChangeName} value={props.name} className={inputClasses.join(' ')}/>
            <button onClick={props.onDelete}>Delete</button>
        </div>
    )
}
 export default Radium(Car)
Answer 1

class App extends React.Component { 
  constructor(props) { 
    super(props); 
    this.state = { 
      cars: [ 
        { name: "Ford", year: 2018 }, 
        { name: "Audi", year: 2016 }, 
        { name: "Mazda", year: 2010 } 
      ], 
      inputValues: { name: "", year: "" }, 
      pageTitle: "React components", 
      showCars: false, 
      newCar: {} 
    }; 
  } 
 
  onChangeHandler = e => { 
    this.setState({ 
      inputValues: {...this.state.inputValues, [e.target.name]: e.target.value} 
    }) 
  }; 
 
  onSubmitHandler = e => { 
    e.preventDefault(); 
    this.setState({ 
      cars: [...this.state.cars, {name: this.state.inputValues.name, year: this.state.inputValues.year}] 
    }) 
     
  }; 
 
  render() { 
    console.log(this.state); 
    return ( 
      <> 
        <form onSubmit={this.onSubmitHandler}> 
          <input 
            onChange={this.onChangeHandler} 
            name="name" 
            type="text" 
            placeholder={"name"} 
          /> 
          <input 
            onChange={this.onChangeHandler} 
            name="year" 
            type="text" 
            placeholder={"year"} 
          /> 
          <button type="submit">xxxx</button> 
        </form> 
      </> 
    ); 
  } 
}

READ ALSO
Задачник и решебник по темам JavaScript

Задачник и решебник по темам JavaScript

Не подскажите ресурс/книгу, где было бы много задач (с ответами) по чистому JS ?

65
Как перевести .gif в массив .png в javascript?

Как перевести .gif в массив .png в javascript?

мне нужно простое решение, одной функцией или небольшой однофайловой библиотекой загружаемой в html файле

115
promise.all и Event loop

promise.all и Event loop

Насколько я понял принцип работы Event Loop, при выполнении кода промисы попадают в очередь Microtask queue и затем выполняются поочередно, потому что...

93
Как сохранить работу (вкл/выкл) расширение в браузере после перезагрузки страницы

Как сохранить работу (вкл/выкл) расширение в браузере после перезагрузки страницы

Чтобы когда плагин включен все работало даже после перезагрузки страницы и отменял изменения после выключения

85