baidu / amis

前端低代码框架,通过 JSON 配置就能生成各种页面。
https://baidu.github.io/amis/
Apache License 2.0
17.44k stars 2.53k forks source link

reload刷新其他组件无效 #3146

Closed erma0 closed 1 year ago

erma0 commented 2 years ago

描述问题:

按钮reload动作刷新其他组件无效,只有ajax动作时带上reload才能刷新,其他任何按钮动作都不能刷新组件内容

截图或视频:

/

如何复现(请务必完整填写下面内容):

  1. 你是如何使用 amis 的? JS sdk

  2. amis 版本是什么?请先在最新 beta 版本测试问题是否存在 1.5.2

  3. 粘贴有问题的完整 amis schema 代码:

    {
        "type": "page",
        "title": "test",
        "body": [
            {
                "type": "button",
                "label": "ajax并刷新id",
                "actionType": "ajax",
                "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm",
                "reload": "combo",
                "onClick": "props.data.id = 111;\r\nprops.data.a = 101;\r\nconsole.log(props.data);"
            }, {
                "type": "button",
                "label": "刷新id",
                "actionType": "reload",
                "target": "combo",
                "reload": "combo",
                "onClick": "props.data.id = 111;\r\nprops.data.a = 10;\r\nprops.data.combo.push({ \"i\": \"111000\"});\r\nconsole.log(props.data);"
            },
            {
                "type": "container",
                "body": [
                    {
                        "type": "tpl",
                        "tpl": "${a}",
                        "inline": false,
                        "style": {}
                    }
                ]
            },
            {
                "type": "container",
                "body": [
                    {
                        "type": "input-text",
                        "label": "文本",
                        "name": "id",
                        "strictMode": false
                    }
                ]
            },
            {
                "type": "combo",
                "label": "组合输入",
                "name": "combo",
                "multiple": true,
                "items": [
                    {
                        "type": "input-text",
                        "name": "i",
                        "placeholder": "文本"
                    }
                ],
                "multiLine": true,
                "joinValues": true,
                "messages": {},
                "scaffold": "",
                "addable": true,
                "value": [
                    {
                        "i": "0"
                    }
                ],
                "strictMode": false
            }
        ],
        "messages": {},
        "style": {},
        "toolbar": [],
        "regions": [
            "body",
            "toolbar",
            "aside",
            "header"
        ],
        "data": {
            "a": 0
        }
    }
  4. 操作步骤 “刷新id”按钮"actionType": "reload",我在onclick里修改了文本框和组合输入框的变量值,但是组件没有刷新,按钮动作用ajax再指定reload就可以刷新,而且只有ajax动作可以,用其他动作加上指定reload也不会刷新

请问是我使用方法有问题吗,我是想在其他行为(只是点击按钮,不发送ajax请求)修改了文本框等组件的变量后刷新显示内容

erma0 commented 2 years ago

又测试了一下,发现只要是ajax动作,就算不带reload也一样会刷新其他组件。

{
    "type": "button",
    "label": "ajax并刷新id",
    "actionType": "ajax",
    "api": "https://3xsw4ap8wah59.cfc-execute.bj.baidubce.com/api/amis-mock/mock2/form/saveForm",
    "onClick": "props.data.id = 111;\r\nprops.data.a = 101;\r\nconsole.log(props.data);"
}
2betop commented 2 years ago

combo 刷新期望是什么样的效果?

ajax 刷新,是因为这个请求返回了新数据作用到了整个 form

erma0 commented 2 years ago

@2betop 刷新期望的效果是:在其他行为(只点击按钮,不发送ajax请求,在按钮自定义onclick中的js代码修改变量。)修改了combo/文本框等组件绑定的变量后,立即刷新显示的内容。目前测试感觉好像reload毫无作用,只有ajax的时候会刷新

erma0 commented 2 years ago

搞明白了,reload并不是重新渲染组件,这里说的刷新指定组件,只是说重新请求目标组件的api。。。

那我的问题是,在使用js代码修改了变量值以后,绑定变量的标签/组件没有及时更新渲染,但是使用ajax动作后就会自动更新,这个有什么解决办法吗

xtefluo commented 2 years ago

你的问题现在解决了没有?

nwind commented 1 year ago

现在可以使用新的事件动作来更新数据

yanshengyong commented 5 months ago

求问我现在主页面会同时存在多个page组件,不同page组件下的子组件如果实现互相通信呢?