记录下来,一来给自己提醒,二来帮助一些朋友们解决问题。大部分都是很傻的坑,但就是踩了,orz样式方面1)、使用antd的table 想要改变td的样式,比如想要显示不完时省略 下图中2是官方文档的写法,当我们想要改变td样式时可以自己写一个render,见12.逻辑方面用的是dva,先简要概括一些model里各个的用法: namespace:唯一 state:初始化数据 subscriptions:路由变化,拿页面最初始数据 监听 effects:请求数据 处理异步action reducers: 更新数据 1)、想向后端发送一个请求,得到返回值后再提交另一个请求,像promise.then一样。 错误思路: 一开始很傻地直接前后写了两个dispatch,结果错误,虽然分前后顺序调用了接口(dispatch是同步执行的),可是并没有根据第一个dispatch的结果动态调用第二个接口。 解决方法: 在model里的effects中相关的函数里调用第二个接口所以使用effects的put来触发action。首先用dispatch向后端发起第一个请求,接着在effects里addAddressable函数里调用第二个请求model.js:2)、如何在effects里获取state里维护的值如上图,payload里需要sate里的deviceName、description等根据前面的图应该知道应该用select可是网上大概有两种方法:const todos = yield select(state => state.todos);const {id} = yield select(=>.storeIf) storeIf 是model的namespace我使用第一种获取不到,原因还不知道。所以如果法一获取不到,不妨用法二const {deviceName,description,templateDetail} = yield select(=>.device);3)、如何在render里动态渲染不同的div?在render中使用if else会报错解决:使用三元运算符 a?b:ca是一个触发不同div的条件,b是一个div,c是另一个div4)、根据后端数据动态渲染input数量,并且把输入值存到state中接受到的数据肯定是一个对象,类似:{{ a:1},{ b:2}}用map遍历得到a,b。但接下来一个问题是动态存入数据。解决:把后端可能要显示的字段都先在model的state中设置初始值。我这里是可能显示port或者address.在state写:{ address:"", port:0}通过[] 可以动态存入port或者address暂时遇到的就是这样了,其实准确来说也不是坑,是我在学习这个上的比较费时间的一些东西。发出来就是希望大家百度问题时看到,尽快解决,少花点时间。