From 93f5c3b7b181421798e548abbcae0e3e3ddb9dfa Mon Sep 17 00:00:00 2001 From: "lihao.ylh" Date: Mon, 23 Aug 2021 19:07:03 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E4=BF=AE=E6=94=B9=20r?= =?UTF-8?q?eadonly=20=E5=B1=9E=E6=80=A7=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/react-simulator-renderer/src/renderer-view.tsx | 2 +- packages/react-simulator-renderer/src/utils/misc.ts | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/react-simulator-renderer/src/renderer-view.tsx b/packages/react-simulator-renderer/src/renderer-view.tsx index cf8186120..c17675c0f 100644 --- a/packages/react-simulator-renderer/src/renderer-view.tsx +++ b/packages/react-simulator-renderer/src/renderer-view.tsx @@ -159,7 +159,7 @@ class Renderer extends Component<{ suspended={renderer.suspended} self={renderer.scope} customCreateElement={(Component: any, props: any, children: any) => { - const { __id, __desingMode, ...viewProps } = props; + const { __id, __designMode, ...viewProps } = props; viewProps.componentId = __id; const leaf = documentInstance.getNode(__id) as Node; if (isFromVC(leaf?.componentMeta)) { diff --git a/packages/react-simulator-renderer/src/utils/misc.ts b/packages/react-simulator-renderer/src/utils/misc.ts index a4cd86848..faf63296a 100644 --- a/packages/react-simulator-renderer/src/utils/misc.ts +++ b/packages/react-simulator-renderer/src/utils/misc.ts @@ -47,6 +47,11 @@ function haveForceUpdate(instances: any[]): boolean { return instances.every(inst => 'forceUpdate' in inst); } +function isPropWritable(props: any, propName: string): boolean { + const descriptor = Object.getOwnPropertyDescriptor(props, propName); + return !!descriptor?.writable; +} + /** * 是否支持快捷属性值设值 * @param data @@ -69,6 +74,8 @@ export function supportsQuickPropSetting(data: ActivityData, doc: DocumentInstan propKey && // 不是 extraProp !propKey.startsWith('___') && + // props[propKey] 有可能是 readyonly 的 + instances.every(inst => isPropWritable(inst.props, propKey)) && !isJSSlot(value) && // functional component 不支持 ref.props 直接设值,是 readonly 的 isReactClass((doc.container?.components as any)[componentName]) &&