javascript – 为什么这个选择列表不会根据defaultValue选择正确的项目进行渲染

前端之家收集整理的这篇文章主要介绍了javascript – 为什么这个选择列表不会根据defaultValue选择正确的项目进行渲染前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个ReactJS组件:
var RegionsList = React.createClass({

    handleChange: function () {
        var regionId = this.refs.userRegions.getDOMNode().value;
        this.props.onRegionSelected(regionId);
    },componentDidMount: function() {
        $.get("/translation/activeuserregions",function(result) {
            if(this.isMounted()) {
                this.setState({
                    selectedRegionId: result.SelectedRegionId,regions: result.Regions
                })
            }     
        }.bind(this));
    },getInitialState: function(props) {
        return {
            selectedRegionId: '',regions: []    
        }    
    },render: function() {
        return (
            <div id="RegionsListForm" className="navbar-form navbar-left regions-list">
                <div className="input-group navbar-searchBox">
                    <span className="input-group-addon">
                        <span>Region</span>
                    </span>
                    <select ref="userRegions" onChange={this.handleChange} defaultValue={this.state.selectedRegionId} className="form-control valid" id="region" name="region" aria-invalid="false">
                        {this.state.regions.map(function(region) {
                            return <option key={region.Id} value={region.Id} label={region.RegionName}>{region.RegionName}</option>        
                        })}                                             
                    </select>
                </div>
            </div>
        );
    },})

它似乎正常工作.但是最初没有选择正确的项目来呈现.虽然defaultValue似乎设置正确,所以我不明白为什么.

我究竟做错了什么?

解决方法

当< select>最初安装,默认值为”.一旦在DOM中存在不受控制的表单组件,React就不会看到defaultValue的更新.在这种情况下,您的目的是希望始终使selectedRegionId状态与用户显示的状态相匹配,因此您可能希望将defaultValue更改为值并添加一个this.setState({selectedRegionId:regionId});调用你的onChange处理程序;那么您的组件状态和DOM将始终保持同步.
原文链接:https://www.f2er.com/js/155415.html

猜你在找的JavaScript相关文章