ReactJs不会在选择组件上重新呈现dom元素

ReactJs不会在选择组件上重新呈现dom元素,reactjs,Reactjs,我创建一个自定义选择组件,当我从父级更新选项时,渲染方法不会在选择元素上重新渲染我的选项 下面是我的代码: 选择组件: 渲染{ 回来 { => { 如果this.props.items&&this.props.items.length>0{ this.props.items.mapthis.renderSelectOption; } }} ; } 渲染选择器{ 回来 ; } 编辑:我注意到在您的示例中,函数名没有对齐。您的自定义选择渲染使用this.handleChange,但您的父级将通过o

我创建一个自定义选择组件,当我从父级更新选项时,渲染方法不会在选择元素上重新渲染我的选项

下面是我的代码:

选择组件:

渲染{ 回来 { => { 如果this.props.items&&this.props.items.length>0{ this.props.items.mapthis.renderSelectOption; } }} ; } 渲染选择器{ 回来 ;
} 编辑:我注意到在您的示例中,函数名没有对齐。您的自定义选择渲染使用this.handleChange,但您的父级将通过onChange。看起来你应该传下去:

<MySelect handleChange={event => .. } />
首先,因为这是一个函数声明,在JSX内部您需要组件

你可以在这里使用函数,只要你马上调用它。。但是您还需要从调用map返回数组

您可以通过在调用map之前添加默认值来进一步实现这一点:


因此,以下内容对我很有用:

从“React”导入React,{Component}; 导出类MySelectComponent扩展组件{ 静态类型={ 键:React.PropTypes.string, isMultiSelect:React.PropTypes.bool.isRequired, initialOptions:React.PropTypes.array, onChange:React.PropTypes.func, 禁用:React.PropTypes.bool, 占位符:React.PropTypes.string, 值:React.PropTypes.string, 标签:React.PropTypes.string } 建造师{ 超级的 this.state={} this.handleChange=this.handleChange.bindthis; this.renderOptions=this.renderOptions.bindthis; } 渲染{ 让期权=[]; 如果这个.props.placeHolder{ 选择。推; } 如果这是.state.options{ this.state.options.mapoption=>{ 选择。推; }; }否则,如果this.props.initialOptions{ this.props.initialOptions.mapoption=>{ 选择。推; }; } 返回选项; } HandleChange事件{ 如果this.props.onChange的类型===函数{ this.props.onChangeevent; } } 渲染{ 回来 {this.renderOptions} ; }
}我必须把代码录下来,这样我的代码中的名字就不会错配,也许只是在传输时的打字错误。我的其余答案能解决你的问题吗?我不这么认为,除非我没有抓住要点。我不确定我是否理解匿名函数的问题,它正在工作。核心问题是如何使选项以最优雅、最恰当的方式在我的select组件中动态重新呈现?但您编写的代码不会工作,至少不会像您在问题中所编写的那样。我用在此期间提出的内容更新了我的帖子。您的代码有太多错误..=/但最重要的是,不能对ref调用setState,它只是一个DOM节点。我也有这个问题。不幸的是,试图回答这个问题的人选择的是打字错误,而不是实际问题,即选择选项值无法动态更新。
{() => {
  if (this.props.items && this.props.items.length >0) {
    this.props.items.map(this.renderSelectOption);
  }
}}
{() => {
  if (this.props.items && this.props.items.length > 0) {
    return this.props.items.map(this.renderSelectOption); // added return
  }
}()} <-- parens to invoke function (IIFE)
{ this.props.items && // if exists
  this.props.items.length > 0 && // if has length
  this.props.items.map(this.renderSelectOption) // render array   
}
{ (this.props.items || []).map(this.renderSelectOption) }