点击编辑的时候,raw类型的Body显示的不对,同时导出html和markdown时,Body内容是空的,导不出来!!!
版本号
~ v1.9.1 v1.9.2 v1.9.3 所有版本都有这个问题
什么问题
~ 点击编辑的时候,Body显示的不对(一直显示{"type":"object","title":"empty object","properties":{}}),预览是对的。点一下运行,再点回编辑就对了。
如何复现此问题
~ 新建一个接口,然后选post请求,然后点击Body,点击raw,然后输入值,然后刷新页面。然后点击编辑的时候,Body显示的不对(一直显示{"type":"object","title":"empty object","properties":{}}),然后点击预览是对的。然后点一下运行,然后再点回编辑Body显示就又对了。
点击导出html或者markdown,Body内容都是空的,导不出来
什么浏览器
~ Chrome 版本 92.0.4515.107(正式版本) (64 位)
什么系统(Linux, Windows, macOS)
Windows
调试了一下,应该是InterfaceEditForm.js ResBodySchema 的onChange导致的,传了非json数据,parse之后返回了默认数据,和原数据对比不相同,所以触发了 onChange,进一步改变了原始数据。 不知道作者如何修复这个问题
https://github.com/YMFE/yapi/blob/ed6771a25a5437562f6a7c277d86a778436a0769/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js#L1230-L1235
调试了一下,应该是InterfaceEditForm.js ResBodySchema 的onChange导致的,传了非json数据,parse之后返回了默认数据,和原数据对比不相同,所以触发了 onChange,进一步改变了原始数据。 不知道作者如何修复这个问题
https://github.com/YMFE/yapi/blob/ed6771a25a5437562f6a7c277d86a778436a0769/client/containers/Project/Interface/InterfaceList/InterfaceEditForm.js#L1230-L1235
估计不会修复了,这么久没动静
搞了个workaround,如下面代码所示: 当原始res_body不是json,并且onChange传递的是默认json时,不做任何改动。 之后运行npm run build-client,主要是重新生成static/prd下的文件。
const defaultEmptyObjectString = JSON.stringify({"type":"object","title":"empty object","properties":{}})
onChange={text => {
// 如果原始数据非json,此处会意外修改原数据,导致非json数据丢失
// 此处代码避免意外修改非json
if (text === defaultEmptyObjectString && !checkIsJsonSchema(this.state.res_body)) {
return
}
this.setState({
res_body: text
});
+1
+1