我想在使用redux进行ajax调用后填充表单。
我的情况非常简单:
connect()
绑定到状态的反应视图。解决方案1:
如果我从道具中设置值:
const Field = ({ field, onFieldChange, value }) => (
<input
value={value}
onChange={(event) => { onFieldChange(field, event.target.value) }}
type="text"
/>
)
它有效,但我收到了这个警告:
Field is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa).
我理解为什么会出现此错误,因为我不应该使用组件来显示某些内容,也可以更新它。
我也尝试使用defaultValue道具,但这仅用于创建组件(我们还没有用户)。在ajax调用返回后,无法调用defaultValue。
解决方案2:
每次状态更新时,使用带有自定义插件的redux-form更新表单模型。我觉得这个解决方案真的很干净,但也许我错了。
我真的很瘦,我走向错误的方向,它应该存在更好的方式。
有人已经遇到过这种问题吗?
答案 0 :(得分:2)
当我尝试将undefined
作为输入值时,我遇到了同样的问题。
要解决此问题,请确保至少将空字符串传递给输入,而不是未定义
const Field = ({ field, onFieldChange, value }) => (
<input
value={value || ''} // <- add fallback value here
onChange={(event) => { onFieldChange(field, event.target.value) }}
type="text"
/>
)
答案 1 :(得分:1)
CASE
WHEN POT_TYPE_CODE = 20 AND Cast(CASE_QTY AS DECIMAL(4,2)/SUM(CAST(CASE_QTY AS DECIMAL(4,2)) OVER (PARTITION BY LOAD_ID) > .5
THEN 'Test'
WHEN PO_TYPE_CODE = 33 AND Cast(CASE_QTY AS DECIMAL(4,2)/SUM(CAST(CASE_QTY AS DECIMAL(4,2)) OVER (PARTITION BY LOAD_ID) > .25
THEN 'Test 2'
END as my_new_field
,查看更多here 上面的解决方案肯定会起作用,但它看起来并不好。