3D 面板的重试代次改在点击时铸造

- src/components/image-editor/model3d-generation/Model3dGenerationModal.tsx:失败态下的代次刷新由渲染体里的常量改为点击时调用的 resolveSubmitDialog(),提交键不再随每次重渲染(含 StrictMode 双渲染)变化,渲染保持纯函数
This commit is contained in:
2026-09-24 17:26:17 +08:00
parent cd5218535e
commit 3191ca9d89
@@ -80,7 +80,9 @@ export function Model3dGenerationModal({
// 幂等键 = 代次 + 请求内容指纹,同键同请求只会拿回原来那个终态 operation。
// 所以失败态下的任何提交(主按钮或「重试」)都要开新一代,否则点下去只是重现同一次失败;
// 参数一改本来就会换代号次,这里补的是「不改参数直接再点一次」这条路。
const submitDialog =
// 代次只在点击那一刻铸:写在渲染体里会让每次重渲染(含 StrictMode 双渲染)都换一个随机值,
// 渲染结果不确定,也和「这一次点击」对不上。
const resolveSubmitDialog = () =>
dialog.status === 'failed' ? refreshModel3dAttemptNonce(dialog) : dialog;
// 每次都新建数组会让上面的 dismiss effect 每次渲染都重挂监听;ref 对象本身是稳定的。
@@ -131,7 +133,7 @@ export function Model3dGenerationModal({
className="image-canvas-editor__generation-submit"
disabled={!canSubmit}
aria-label={MODEL3D_GENERATION_SUBMIT_LABEL}
onClick={() => onSubmit(submitDialog)}
onClick={() => onSubmit(resolveSubmitDialog())}
>
{isGenerating ? (
'生成中'
@@ -152,7 +154,7 @@ export function Model3dGenerationModal({
size="xs"
shape="pill"
aria-label="重试生成 3D 模型"
onClick={() => onSubmit(submitDialog)}
onClick={() => onSubmit(resolveSubmitDialog())}
>
重试
</PlatformActionButton>