Javascript 反应选择-我无法确定如何设置默认值
这已经被问了好几次了,很抱歉,但我不能解决这个问题。我读过这些文件,但我找不到任何有效的东西,所以我显然不明白这里发生了什么Javascript 反应选择-我无法确定如何设置默认值,javascript,reactjs,react-select,Javascript,Reactjs,React Select,这已经被问了好几次了,很抱歉,但我不能解决这个问题。我读过这些文件,但我找不到任何有效的东西,所以我显然不明白这里发生了什么 class DivisionExtraDetails extends Component { constructor(props) { super(props); this.state = { error: false, loading: true, removing: null, savi
class DivisionExtraDetails extends Component {
constructor(props) {
super(props);
this.state = {
error: false,
loading: true,
removing: null,
saving: false,
geofence: false,
startTimeOfDay: ''
};
}
componentDidMount() {
const { division } = this.props;
Axios.get(`${API_URL}assetgroups/${division.id}`)
.then(r => {
this.setState({
loading: false,
geofence: r.data.geofence_assign,
startTimeOfDay: r.data.day_start
});
})
.catch(err => {
if (!Axios.isCancel(err)) {
this.setState({
error: true
});
}
});
}
render() {
const { error, loading, geofence, saving, startTimeOfDay } = this.state;
const { assignText, division } = this.props;
const geoFenceOptions = [
{value: 1, label: 'YES'},
{value: 0, label: 'NO'},
{value: null, label: 'Not yet set'},
];
return (
<React.Fragment>
<div className="col-5">
<span>Assign a GeoFence (Yes/No)</span>
<Select
selectedValue={geofence}
options={geoFenceOptions}
className="basic-multi-select"
classNamePrefix="select"
onChange={this.handleChange}
/>
</div>
</React.Fragment>
);
}
我还尝试了以下变量:
{this.state.geofence}
如果我在dev工具中查看,我可以看到对db的调用正确地填充了状态。
但我不能解决这个问题。如果有人能帮助完成这项看似简单的任务,那就太好了。谢谢。您在react select中以布尔值或字符串的形式传递值,但您以其选项的形式传递对象,因此react select无法找到“显示默认值”
constructor(props) {
super(props);
this.state = {
// ... code omitted
geofence: /* set default value here */
};
}
要解决此问题,您需要在value prop中传递正确的对象,因此请尝试以下操作:-
类详细信息扩展组件{
构造器{
超级作物;
此.state={
错误:false,
加载:对,
删除:null,
储蓄:错,
地理围栏:错,
开始日期:,
//将geoFenceOptions设置为state,以便稍后使用
地理围栏选项:[
{value:true,标签:'YES'},
{value:false,标签:'NO'},
{value:null,标签:'尚未设置'},
];
};
}
//根据提供的值查找正确的Geofense选项
getGeoFenceValue=value=>{
返回this.state.geofengineoptions.findoption=>option.value==value;
}
组件安装{
const{division}=this.props;
获取`${API\u URL}assetgroups/${division.id}`
.thenr=>{
这是我的国家{
加载:false,
geofence:this.getGeoFenceValuer.data.geofence\u assign,//调用函数以查找正确的选项
开始日期:r.data.day\u开始
};
}
.catcherr=>{
如果!Axios.iscanceler{
这是我的国家{
错误:正确
};
}
};
}
渲染{
const{error,loading,geofense,saving,startTimeOfDay,geofenseOptions}=this.state;
const{assignText,division}=this.props;
回来
指定地理围栏是/否
;
}
您能告诉我们geofence的控制台日志吗?返回'false'我已更改代码以反映不同的值名称const geoFenceOptions=[{value:true,label:'Yes'},{value:false,label:'N0'},{value:null,label:'Not Not set'},];因此,您将选项作为对象传递,但将react select中的值作为布尔值或字符串传递,这就是它不起作用的原因。尝试将值作为对象传递,如{value:false,label:'N0'}非常感谢。如果我尝试基于API调用动态填充该值,该值会是什么样子?-{value:{geofinence},label:{???}。它已经在那里设置好了,如上面的代码所示。不管怎样,我在“componentDidMount”中执行API调用,将其设置为DB中的正确值。geoFenceOptions是一个对象数组,而您提供的默认值为boolean。显然,这永远不会起作用。更不用说geoFenceOptions中的可用值是1、0和null.这里没有false。谢谢你或你的帮助。我很感激,但是,我仍然无法设置默认值,它仍然没有显示geofence中的值。你是否在react select中传递值属性?我当前使用的是selectedValue={this.state.startTimeOfDay.value}在选择框中。如果我从控制台调用this.state.starTimeOfDay.value,它将返回:00:00:00,这正是我所需要的,但我无法在组件的第一次渲染时加载它。我想知道在从componentDidMount调用DB后的第一次渲染中,我是否应该使用选择组件上的其他属性来设置它??
constructor(props) {
super(props);
this.state = {
// ... code omitted
geofence: /* set default value here */
};
}