Была бы кнопка сабмита, я бы повесил на неё и передал все данные, но так выходить передавать только 1 пару ключ:значение, то есть State заменяется. И да, я знаю, что в потомке стейт не комильфо, однако, как иначе вообще не понимаю. Мне говорили прокинуть пропсы, но те куски кода, что показали, вообще не подходят или не понимаю как сделать.
App.js, родитель
class App extends Component {
constructor(props) {
super(props);
this.handlePropChange = this.handlePropChange.bind(this);
this.state = {
filterSet: {}
}
}
handlePropChange(props) {
this.setState({ filterSet: props })
}
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Welcome to CardC</h1>
</header>
<Filter onPropChange={this.handlePropChange} />
{/* <CardList filterSet={this.state.filter} /> */}
</div>
);
}
}
Код дочернего, Filter.js, из его параметров хочу собрать в App.js, Обработать и передать в CardList
class Filter extends Component {
constructor(props) {
super(props);
this.handleCheck = this.handleCheck.bind(this);
this.handleChange = this.handleChange.bind(this);
this.state = {
}
}
handleChange(e) {
this.setState({
[e.target.name]: e.target.checked ? 1 : 0
});
}
handleCheck(e) {
this.setState({
[e.target.name]: e.target.value
});
}
render() {
return (
<div className="filter">
<div><label>Кешбек <input type="checkbox" name="cashback" onChange={this.handleCheck} /></label></div>
<div><label>Бесплатное обслуживание <input type="checkbox" name="free_price" onChange={this.handleCheck}/></label></div>
<div><label>Цена <input type="text" name="price" onChange={this.handleChange} /></label></div>
</div>
)
}
}
Ты можешь создать кнопку и к этой кнопке привязать функцию которая через пропс передала бы state твоего дочернего компонента. В state ты можешь добавить конкретные значения. Я сделал пример, но не тестировал его. Тебе скорее всего нужно будет немного изменить то как твой state будет выглядеть. Главное что State это объект, так что с ним по идеи можно делать все (если не все, то многое) что с обычным объектом. Надеюсь это хоть как-то поможет.
class Filter extends Component {
constructor(props) {
super(props);
this.state = {
name1: '';,
name2: '';
}
this.handleCheck = this.handleCheck.bind(this);
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
this.setState({
this.state.name1: e.target.checked ? 1 : 0
});
}
handleCheck(e) {
this.setState({
this.state.name2: e.target.value
});
}
handleSubmit(event) {
this.props.onPropChange(this.state.name1, this.state.name2);
}
render() {
return (
<div className="filter">
<div><label>Кешбек <input type="checkbox" name="cashback" onChange={this.handleCheck} /></label></div>
<div><label>Бесплатное обслуживание <input type="checkbox" name="free_price" onChange={this.handleCheck}/></label></div>
<div><label>Цена <input type="text" name="price" onChange={this.handleChange} /></label></div>
</div>
)
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Учусь писать на React, Существует ли способ, средствами React анимировать смену положения input type="range"
В представлении есть много полей с данными, также есть прикрепленное количество файловВсе данные собираю в объект и передаю в формате JSON в контроллер
Не получается вывести данные JSON с Google api booksВот так выглядит пример что возвращает JSON https://www
Не работает самая простая функцияПри запуске кода, срабатывает один раз