【发布时间】:2021-01-09 00:02:35
【问题描述】:
我正在使用 react-select 库来创建多选菜单。当没有选择值时,我希望在 div 上使用某种样式宽度,并且当用户开始从选择下拉列表中选择值时,我希望将此宽度设置为 null,以便选择组件可以使用它自己的自动调整宽度能力。我有下面的代码,但我无法获得同步更新的宽度,因为它在下一次渲染调用后更新。不知道如何让它立即更新为新的宽度。我知道 setState 是异步的,但如果你在 setState 函数中使用回调,我想它会以新状态呈现。
...
constructor(props) {
super(props);
this.state = {
dropBoxWidth: { width: 130 },
selectLength: 1
}
}
.....
handleChange = selectedOption => {
if (this.state.selectLength > 0) {
this.setState(
{ selectedOption, selectLength: selectedOption.length, dropBoxWidth: null },
() => console.log(`Option selected:`, this.state.selectedOption, this.state.selectLength, this.state.dropBoxWidth)
);
} else {
this.setState({ dropBoxWidth: { width: 130 }, selectLength: 1 }), () =>
console.log("New Dropbox Width ", this.state.dropBoxWidth)
}
};
render() {
return (
<div style={this.state.dropBoxWidth}>
<Select
closeMenuOnSelect={false}
isMulti
options={aList}
onChange={this.handleChange}
placeholder="Item Select"
/>
</div>
)
}
再次明确,当没有选择值时,我希望将 div 的样式宽度设置为 130。这可能是在页面打开或刷新时(构造函数 props 的宽度为 130),如果用户选择值然后决定从菜单中清除所有选择。
【问题讨论】:
标签: javascript reactjs react-select