#reactjs
#reactjs
Вопрос:
Моя цель — изменить значение объекта на true
или false
при изменении флажка.
Объект содержит:
{
id: '12497wewrf5144',
name: 'ABC',
isVisible: 'false'
}
Вот код:
import React, { Component } from 'react'
class Demo extends Component {
constructor(props) {
super(props)
this.state = {
demo: {}
}
}
componentDidMount() {
axios
.get('/api/random')
.then(res => {
this.setState({ demo: res.data?.[0] })
})
.catch(error => {
console.log(error)
})
}
render() {
return (
<div>
<h1>{this.state.demo.name}</h1>
<input type="checkbox" value={this.state.demo.value} />
</div>
)
}
}
export default Demo
Я не знаю, что написать в методе onchange для checkbox, чтобы изменять значение только внутри объекта.
Кто-нибудь может мне помочь в этом запросе?
Комментарии:
1. Какое значение вы пытаетесь переключить? У вашего
state.demo
нет или не будетvalue
свойства.
Ответ №1:
<input
type="checkbox"
value={this.state.demo.value}
onChange={(event) => {
this.setState((prevState) => ({
...prevState,
demo: { ...prevState.demo, isVisible: event.target.checked }
}));
}}
/>
Ответ №2:
Учитывая, что ваше состояние в конечном итоге выглядит как
this.state = {
demo: {
id: "12497wewrf5144",
name: "ABC",
isVisible: "false",
value: false
}
};
Вы можете создать обработчик изменений как таковой
changeHandler = e => {
e.preventDefault();
const { checked } = e.target;
this.setState(prevState => ({
...prevState, // <-- spread existing state
demo: {
...prevState.demo, // <-- spread existing demo
value: checked, // <-- save the input's checked value
}
}))
}
Присоедините changeHandler
к onChange
обратному вызову события
<input
type="checkbox"
onChange={this.changeHandler}
value={this.state.demo.value}
/>
Комментарии:
1. объект содержит само значение. Не могли бы вы, пожалуйста, помочь мне, как изменить значение isVisible в объекте?
2. @Arunya Конечно. Не могли бы вы предоставить немного более подробную информацию о том, что означает «объект содержит само значение». Пожалуйста, обновите свой вопрос, чтобы включить более точные сведения об объекте о том, что / как вы пытаетесь обновить.
Ответ №3:
Чао, ты мог бы использовать onClick
событие, подобное этому:
...
handleClick = (e, data) => {
const demo = { ...this.state.demo };
demo.isVisible = !demo.isVisible;
this.setState({ demo });
}
...
<input type="checkbox" value={this.state.demo.value} onClick={((e) => this.handleClick(e, data))}/>
...