gpt4 book ai didi

javascript - React-bootstrap ToggleButtonGroup 调用时使用旧值

转载 作者:行者123 更新时间:2023-12-02 23:46:17 25 4
gpt4 key购买 nike

我有一个使用 react-bootstrap 中的 ToggleButtonGroup 的表单。我需要根据切换中选择的值更改表单中的一些文本值。问题是,当在按钮上调用 onChange 时 - 我得到了之前选择的切换值,而不是新值。

constructor(props) {
super(props);
this.tradeInput = React.createRef();
}

handleChange() {
console.log(this.tradeInput.current.props.value); // old value printed here
}

<ToggleButtonGroup type="radio" name="trade" defaultValue="BUY" ref={this.tradeInput} onChange={e => this.handleChange(e)}>
<ToggleButton value="BUY">BUY</ToggleButton>
<ToggleButton value="SELL">SELL</ToggleButton>
</ToggleButtonGroup>

有人可以建议如何解决这个问题吗?

编辑:当我尝试读取引用中的值时,发生了非常奇怪的事情:

console.log(this.tradeInput.current) 显示 current.props.value 中正确的更新值,但如果我尝试打印 console。 log(this.tradeInput.current.props.value) 使用完全相同的输入,它给了我不同的结果(旧值)。

EDIT2:完整更新的代码

class ResourceTradePanel extends React.Component {
constructor(props) {
super(props);

this.state = {
validated: false,
caps: 0,
junk: 0,
food: 0,
trade: "BUY"
};

this.handleJunkChange.bind(this);
this.handleFoodChange.bind(this);
this.handleTradeChange.bind(this);
this.updateCaps.bind(this);
this.handleSubmit.bind(this);
}

handleSubmit(event) {
...
}

handleJunkChange(event) {
this.setState({
junk: event.target.value
});
this.updateCaps();
}

handleFoodChange(event) {
this.setState({
food: event.target.value
});
this.updateCaps();
}

handleTradeChange(event) {
this.setState({
trade: event.target
});
this.updateCaps();
}

updateCaps() {
var capsInfo = 0;
const junk = parseInt(this.state.junk);
const food = parseInt(this.state.food);
if (this.state.trade === "BUY") {
capsInfo = (junk + food) * 2;
} else if (this.state.trade === "SELL") {
capsInfo = junk + food;
};

this.setState({
caps: capsInfo
});
}

render() {
return <Card>
<Card.Body>
...
<Form
id="resourceForm"
noValidate
validated={this.state.validated}
onSubmit={e => this.handleSubmit(e)}
>
<InputGroup className="mb-3">
<FormControl
name="junk"
type="number"
min={0}
max={10}
value={this.state.junk}
onChange={e => this.handleJunkChange(e)}
/>
<Form.Control.Feedback type="invalid">
<Translate id="labels.resourceLimitExceeded" />
</Form.Control.Feedback>
</InputGroup>
<InputGroup className="mb-3">
<FormControl
name="food"
ref={this.foodInput}
type="number"
min={0}
max={10}
value={this.state.food}
onChange={e => this.handleFoodChange(e)}
/>
<Form.Control.Feedback type="invalid">
<Translate id="labels.resourceLimitExceeded" />
</Form.Control.Feedback>
</InputGroup>
<InputGroup>
<FormControl
type="number"
disabled
value={this.state.caps}
/>
</InputGroup>
<ToggleButtonGroup type="radio" name="trade" defaultValue={this.state.trade} onChange={e => this.handleTradeChange(e)}>
<ToggleButton variant="outline-dark" value="BUY"><Translate id="labels.buy" /></ToggleButton>
<ToggleButton variant="outline-dark" value="SELL"><Translate id="labels.sell" /></ToggleButton>
</ToggleButtonGroup>
</Form>
</Card.Body>
</Card>
}
};

最佳答案

终于我找到问题了...试试这个

    handleTradeChange(event) {
// trigger you updateCaps() after updated the current state.
this.setState({
trade: event.target
},()=> this.updateCaps(););

}

试试这个,您可以使用 this.state.tradeValue 随时访问切换按钮的当前值

constructor(props) {
super(props);
this.state = {
tradeValue : "BUY"
}
this.tradeInput = React.createRef();
}

handleChange(value) {
this.setState({ tradeValue : value})
}

<ToggleButtonGroup type="radio" name="trade" value={this.state.tradeValue} onChange={this.handleChange}>
<ToggleButton value="BUY">BUY</ToggleButton>
<ToggleButton value="SELL">SELL</ToggleButton>
</ToggleButtonGroup>

关于javascript - React-bootstrap ToggleButtonGroup 调用时使用旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55848857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com