React FluentUI 组件未更新
React FluentUI Component Not Updating
我在 Sharepoint webpart 中有一个 FluentUI Dropdown component 行为异常,它的定义如下:
<Dropdown
defaultSelectedKey={new Date().getMonth()}
options={getMonthSelection()}
styles={dropdownStyles}
onChange={this.handleTimePeriodChange}
selectedKey={this.state.month}
/>
当 onChange 事件触发时,它会调用以下函数:
private handleTimePeriodChange(event, option, index) {
this.setState({
month: option.key
});
}
除 Dropdown UI 元素未更改以反映新选择外,一切正常。如果我删除对 setState() 的调用,则 UI 元素会更新以反映选择,但状态不会更新。
谁能看出我哪里出错了,是否有办法在不破坏 UI 元素的情况下更新状态属性?
问题出在 Dropdown 组件本身的定义中,并且是由于 defaultSelectedKey 属性。我 认为 这里发生的事情是,它没有为下拉列表设置初始值,而是将控件绑定到传入的对象;上面代码中的结果是 Dropdown 值绑定到新的 Date().getMonth() 即使 selectedKey 绑定到 'month' 状态 属性.
解决方案是在初始化时直接将 defaultSelectedKey 设置为状态 属性,然后将状态 属性 设置为当前月份,如下所示:
<Dropdown
defaultSelectedKey={this.state.month}
options={getMonthSelection()}
styles={dropdownStyles}
onChange={this.handleTimePeriodChange}
/>
当我这样做时,下拉选择现在绑定到状态 属性 本身,因此对状态 属性 的任何更改都会反映在 UI 元素中。
我在 Sharepoint webpart 中有一个 FluentUI Dropdown component 行为异常,它的定义如下:
<Dropdown
defaultSelectedKey={new Date().getMonth()}
options={getMonthSelection()}
styles={dropdownStyles}
onChange={this.handleTimePeriodChange}
selectedKey={this.state.month}
/>
当 onChange 事件触发时,它会调用以下函数:
private handleTimePeriodChange(event, option, index) {
this.setState({
month: option.key
});
}
除 Dropdown UI 元素未更改以反映新选择外,一切正常。如果我删除对 setState() 的调用,则 UI 元素会更新以反映选择,但状态不会更新。
谁能看出我哪里出错了,是否有办法在不破坏 UI 元素的情况下更新状态属性?
问题出在 Dropdown 组件本身的定义中,并且是由于 defaultSelectedKey 属性。我 认为 这里发生的事情是,它没有为下拉列表设置初始值,而是将控件绑定到传入的对象;上面代码中的结果是 Dropdown 值绑定到新的 Date().getMonth() 即使 selectedKey 绑定到 'month' 状态 属性.
解决方案是在初始化时直接将 defaultSelectedKey 设置为状态 属性,然后将状态 属性 设置为当前月份,如下所示:
<Dropdown
defaultSelectedKey={this.state.month}
options={getMonthSelection()}
styles={dropdownStyles}
onChange={this.handleTimePeriodChange}
/>
当我这样做时,下拉选择现在绑定到状态 属性 本身,因此对状态 属性 的任何更改都会反映在 UI 元素中。