javascript - 如何在反应中利用子组件中的状态值
问题描述
我正在尝试找到可以利用子组件中状态值的最佳方法。这个想法是创建一个设置组件,其状态可以通过用户输入进行更新,然后可以使用此更新的值来更改另一个组件中某些计算的结果。我已经尝试过 Redux,但我不能让它工作。
我有一个收集用户数据的表格
class SettingModal extends Component {
constructor(props){
super(props);
this.state={
open:false,
value: '',
}
}
handleChange(e) {
this.setState({value: e.target.value}, () =>
this.props.valueDispatcher(this.state.value),
)
}
render() {
const { open } = this.state;
return (
<>
<Button variant="link"
className="promo-code-button"
onClick={() => this.setState({ open: !open })}
aria-controls="example-collapse-text"
aria-expanded={open}
>
{open === false? <Button
color="primary"
block
className="btn-round"
>
Overtime rate Settings
</Button>:<Button
color="primary"
block
className="btn-round"
>
Close overtime Settings
</Button>}
</Button>
<Collapse in={open}>
<div id="example-collapse-text">
<Row className="show-grid">
<Col md={12}>
<Form>
<Form.Group controlId="formInlineName">
<Form.Label>Enter overtime rate and click apply...</Form.Label>
<Form.Control type="text" placeholder="type here"
value={this.state.value}
onChange={this.handleChange.bind(this)}
/>
<Form.Text className="text-muted">
</Form.Text>
</Form.Group>
<Button
block
variant="success"
disabled={this.props.isDisabled}
onClick={this.props.giveDiscount}
>Apply</Button>
</Form>
</Col>
</Row>
</div>
</Collapse>
</>
);
}
}
这是一个调度组件
import { React, useState, useCallback} from 'react';
import WagesSettingModal from './WagesSettingModal';
import WagesCalculator7 from './WagesCalculator7';
function OvertimeRateValue (props) {
const [value, setValue] = useState('Initial')
const handleChange = useCallback(e => setValue(e.target.value), [])
return (
<div>
< WagesSettingModal valueDispatcher={setValue} />
<WagesCalculator value={value}/>
</div>
)
}
export default OvertimeRateValue;
最后,我在这里利用了这个价值
import React from 'react'
Imported above component from './above component'
renderTable() {
var totalCount = 0;
var shownCount = 0;
var lowerBound = 0;
var upperBound = 0;
var filtered = [];
filtered = this.state.data.map( (row, i,) => {
if(row.department.toLowerCase().indexOf(this.state.departmentFilter) > -1){
return (
<tr key={"employeeData"+i}>
<td>{i+1}</td>
<td>{row.name}</td>
<td>{row.numberofPresentAttendances}</td>
<td>{row.department}</td>
<td>{row.wages}</td>
<td>
<Link to={"/employee/overtime/"+row._id}>
<Button className="btn btn-light"><Overtime/></Button>
</Link>
</td>
<td>{row.overtime}</td>
<td>{row.totalWages}</td>
<td>
{row.overtime<1? row.numberofPresentAttendances * row.wages* 8
: row.numberofPresentAttendances * [row.wages* 8]+[row.wages*<above component/>]*row.overtime}
</td>
<td>
</td>
</tr>
);
我的目标是能够通过改变用户输入的数字来改变计算结果的结果
解决方案
推荐阅读
- serial-port - 使用 FTDI 芯片从另一个设备发送到 PC 的 uart 数据包之间的延迟
- angular - 如何在 AWS API Gateway 上为 Angular 推送状态路由添加重写规则
- google-bigquery - 使用数组数组插入 Bigquery 表
- sql - 必须出现在sql的group by子句中
- android - React-Native:redux-saga:在发布模式下无法访问选择器中的静态类
- javascript - 在时间网格全日历垂直资源视图中使第一列保持粘性
- python - [Odoo][v10] 在 Odoo v10 中为 Python 中的关注者添加订阅类型
- excel - 属性进入所有元素
- django - Django 多个数据库外键
- c# - 如何获取 ListView 项目对其作为静态资源创建的数据模板 ViewModel 的引用?