Я пытаюсь найти наилучший способ использовать значение состояния в дочернем компоненте. Идея состоит в том, чтобы создать установочный компонент с состоянием, которое может быть обновлено с помощью пользовательского ввода, и это обновленное значение затем можно использовать для изменения результата некоторых вычислений в другом компоненте. Я пробовал 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>
);
Моя цель - иметь возможность изменить результат результата вычисления, изменяя число, введенное пользователем