修复 combo 的 onInit 送出来还是旧值的问题
This commit is contained in:
parent
94cbacef61
commit
c5dbdd2aec
|
@ -175,6 +175,17 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|||
if (store.activeKey >= values.length) {
|
||||
store.setActiveKey(Math.max(0, values.length - 1));
|
||||
}
|
||||
|
||||
// combo 进来了新的值,且这次 form 初始化时带来的新值变化,但是之前的值已经 onInit 过了
|
||||
// 所以,之前 onInit 设置进去的初始值是过时了的。这个时候修复一下。
|
||||
if (nextProps.value !== props.value && !props.formInited && nextProps.formInited && this.subFormDefaultValues.length) {
|
||||
this.subFormDefaultValues = this.subFormDefaultValues.map((item, index) => {
|
||||
return {
|
||||
...item,
|
||||
values: values[index]
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -364,17 +375,13 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|||
setPrinstineValue
|
||||
} = this.props;
|
||||
|
||||
if (syncDefaultValue === false || disabled) {
|
||||
return;
|
||||
}
|
||||
|
||||
this.subFormDefaultValues.push({
|
||||
index,
|
||||
values,
|
||||
setted: false
|
||||
});
|
||||
|
||||
if (this.subFormDefaultValues.length !== this.subForms.length) {
|
||||
if (syncDefaultValue === false || disabled || this.subFormDefaultValues.length !== this.subForms.length) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -411,11 +418,14 @@ export default class ComboControl extends React.Component<ComboProps> {
|
|||
}
|
||||
|
||||
handleSingleFormInit(values: any) {
|
||||
this.props.syncDefaultValue !== false &&
|
||||
this.props.setPrinstineValue &&
|
||||
this.props.setPrinstineValue({
|
||||
const {syncDefaultValue, setPrinstineValue, value} = this.props;
|
||||
|
||||
|
||||
if (syncDefaultValue !== false && isObjectShallowModified(value, values) && setPrinstineValue) {
|
||||
setPrinstineValue({
|
||||
...values
|
||||
});
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
handleAction(action: Action): any {
|
||||
|
|
|
@ -158,7 +158,8 @@ export default class Form extends React.Component<FormProps, object> {
|
|||
'canAccessSuperData',
|
||||
'lazyChange',
|
||||
'formLazyChange',
|
||||
'lazyLoad'
|
||||
'lazyLoad',
|
||||
'formInited'
|
||||
];
|
||||
|
||||
hooks: {
|
||||
|
@ -330,12 +331,24 @@ export default class Form extends React.Component<FormProps, object> {
|
|||
// 先拿出来数据,主要担心 form 被什么东西篡改了,然后又应用出去了
|
||||
// 之前遇到过问题,所以拿出来了。但是 options loadOptions 默认值失效了。
|
||||
// 所以目前需要两个都要设置一下,再 init Hook 里面。
|
||||
const data = cloneObject(store.data);
|
||||
let data = cloneObject(store.data);
|
||||
const initedAt = store.initedAt;
|
||||
|
||||
store.setInited(true);
|
||||
const hooks: Array<(data: any) => Promise<any>> = this.hooks['init'] || [];
|
||||
await Promise.all(hooks.map(hook => hook(data)));
|
||||
|
||||
if (store.initedAt !== initedAt) {
|
||||
// 说明,之前的数据已经失效了。
|
||||
// 比如 combo 一开始设置了初始值,然后 form 的 initApi 又返回了新的值。
|
||||
// 这个时候 store 的数据应该已经 init 了新的值。但是 data 还是老的,这个时候
|
||||
// onInit 出去就是错误的。
|
||||
data = {
|
||||
...data,
|
||||
...store.data
|
||||
};
|
||||
}
|
||||
|
||||
onInit && onInit(data, this.props);
|
||||
|
||||
submitOnInit &&
|
||||
|
|
|
@ -94,10 +94,6 @@ export const FormStore = ServiceStore.named('FormStore')
|
|||
isPristine: boolean = false,
|
||||
force: boolean = false
|
||||
) {
|
||||
if (name === 'strategy_json') {
|
||||
debugger;
|
||||
}
|
||||
|
||||
// 没有变化就不跑了。
|
||||
const origin = getVariable(self.data, name, false);
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@ export const iRendererStore = types
|
|||
storeType: types.string,
|
||||
hasRemoteData: types.optional(types.boolean, false),
|
||||
data: types.optional(types.frozen(), {}),
|
||||
initedAt: 0, // 初始 init 的时刻
|
||||
updatedAt: 0, // 从服务端更新时刻
|
||||
pristine: types.optional(types.frozen(), {}),
|
||||
disposed: false,
|
||||
|
@ -52,6 +53,7 @@ export const iRendererStore = types
|
|||
|
||||
return {
|
||||
initData(data: object = {}) {
|
||||
self.initedAt = Date.now();
|
||||
self.pristine = data;
|
||||
self.data = data;
|
||||
},
|
||||
|
|
Loading…
Reference in New Issue