【发布时间】:2019-01-27 03:05:25
【问题描述】:
我正在尝试创建一个简单的 SPA(没有路由器)。它还有一个简单的结构:每个部分一个组件:
- 首页
- 服务
- 产品
- 产品
- 模态
- 联系我们
如您所见,组件 Products 有两个子组件 Product 和 Modal。这些被迭代了很多次,因为 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;
每个产品都有一个 More Info 按钮,用于打开模式,而这还有另一个按钮Budget(“Presupuestar”):
该功能应该“改变”联系我们组件的状态(一个简单的联系我们表单):
组件有如下代码:
Contact.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>
);
}
}
我想我应该在 Modal 组件中创建一个函数,以在 Budget 中使用 onClick="setSubject" 触发("Presupuestar" ) 按钮。我不知道如何改变其他组件的状态。
快速总结:我必须进行以下状态更新:
我正在阅读this similar question,但我不知道如何在我的场景中应用。有什么想法吗?
【问题讨论】:
-
当模态或产品被点击时,你真的想改变联系人组件的状态吗?
-
我想是的,我想在点击Modal时改变Contact组件的状态。
标签: javascript reactjs ecmascript-6 jsx mern