Ionic React级联下拉框刷新后第2、3级值丢失(存储中仍存在)问题求助
问题根因
页面刷新后组件初始化时,仅在componentDidMount中加载了第一级下拉的选项DDL1,第二级DDL2、第三级DDL3的选项默认是空数组。即便props.photoObject中已经从Storage读取到了park、id的有效值,IonSelect无法匹配到对应的选项,就会出现选中值显示为空的情况。
修复方案
1. 初始化时同步加载对应层级的选项
修改componentDidMount生命周期逻辑,挂载时根据传入的photoObject已有值,同步初始化第二、三级的下拉选项:
componentDidMount() { const { part, park } = this.props.photoObject; const initDDL1 = parkData; let initDDL2 = []; let initDDL3 = []; // 存在第一级选中值时,初始化第二级选项 if (part) { const matchedFirstLevel = initDDL1.find(item => item.bezirk === part); if (matchedFirstLevel) initDDL2 = matchedFirstLevel.DDL2; // 存在第二级选中值时,初始化第三级选项 if (park && initDDL2.length) { const matchedSecondLevel = initDDL2.find(item => item.objekt === park); if (matchedSecondLevel) initDDL3 = matchedSecondLevel.DDL3; } } this.setState({ DDL1: initDDL1, DDL2: initDDL2, DDL3: initDDL3 }); }
2. 适配props异步更新场景(可选)
如果页面刷新后photoObject是先传空值,等Storage读取完成后才更新传入的有效值,需要新增componentDidUpdate生命周期监听props变化,同步更新下拉选项:
componentDidUpdate(prevProps) { // 仅photoObject更新时触发逻辑 if (prevProps.photoObject.filepath !== this.props.photoObject.filepath || prevProps.photoObject.part !== this.props.photoObject.part || prevProps.photoObject.park !== this.props.photoObject.park) { const { part, park } = this.props.photoObject; let newDDL2 = []; let newDDL3 = []; if (part) { const matchedFirstLevel = parkData.find(item => item.bezirk === part); if (matchedFirstLevel) newDDL2 = matchedFirstLevel.DDL2; if (park && newDDL2.length) { const matchedSecondLevel = newDDL2.find(item => item.objekt === park); if (matchedSecondLevel) newDDL3 = matchedSecondLevel.DDL3; } } this.setState({ DDL2: newDDL2, DDL3: newDDL3 }); } }
修复完成后,刷新页面时组件会提前加载对应层级的下拉选项,IonSelect的value属性可以匹配到对应选项,选中值即可正常显示。
内容的提问来源于stack exchange,提问作者jonsken
相关产品推荐
相关产品推荐

