Я пытаюсь создать простой SPA (без роутера).Он также имеет простую структуру: компонент для каждого раздела:
- Главная
- Услуги
- Продукты
- Свяжитесь с нами
Как видите компонент Продукты имеет два подкомпонента Продукт и Модальные .Они повторяются столько раз, сколько объектов JSON:
Products.js
import React, { Component } from "react";
import ReactHtmlParser from "react-html-parser";
import "./Products.css";
import { products } from "./products.json";
import Product from "./Product/Product";
import Modal from "./Modal/Modal";
class Products extends Component {
render() {
return (
<section id='products'>
<div className='container'>
<div className='row'>
{products.map(product => {
return (
<div>
<Product
image={"/img/" + product.image}
name={product.name}
target={product.target}
/>
<Modal
id={product.target}
title={product.name}
body={ReactHtmlParser(product.body)}
/>
</div>
);
})}
</div>
</div>
</section>
);
}
}
export default Products;
Каждый продукт имеет кнопку Подробнее открывает модальное окно, и у него есть еще одна кнопка Бюджет ( "Presupuestar" ):
Эта функция должна "изменять состояние"из Свяжитесь с нами компонент (простая форма для связи с нами):
Компонент имеет следующий код:
Контакт.js
import React, { Component } from "react";
import "./Contact.css";
class Contact extends Component {
constructor() {
super();
this.state = { budget: "Contact" };
}
render() {
return (
<section id='contact'>
<div className='container'>
<div className='row'>
<div className='col-xs-12 col-md-6'>
<div className='contact-form'>
<form>
...
{/* Subject */}
<div className='form-group'>
<div className='input-group'>
<span className='input-group-addon' />
<input
type='text'
className='form-control'
id='subject'
aria-describedby='Subject'
placeholder='Subject'
readonly='readonly'
value={this.state.budget}
/>
</div>
{/* /form-group */}
</div>
{/* /Subject */}
...
</form>
</div>
</div>
</div>
</div>
</section>
);
}
}
Полагаю, мне нужно создать функцию в Модальном компоненте, который будет запускаться с onClick="setSubject"
в Бюджете ( Кнопка "Presupuestar" ).Чего я не знаю, так это как изменить состояние другого компонента.
Краткое резюме: я должен сделать следующее обновление состояния:
Я читал этот похожий вопрос но я не сделалне понимаю, как применить в моем сценарии.Есть идеи?