Reactjs 从异步源重新组合初始状态值
在Reactjs 从异步源重新组合初始状态值,reactjs,recompose,Reactjs,Recompose,在重新组合中的以下示例中,带状态的初始值为空字符串。如果您需要一个来自数据库或动态源的值,您将如何让它更新该属性更改 例如: withState('value', 'updateValue', (user) => user.name) 来自的原始代码重新组合 const enhance = compose( withState('value', 'updateValue', ''), withHandlers({ onChange: props => event =
重新组合
中的以下示例中,带状态
的初始值为空字符串。如果您需要一个来自数据库或动态源的值,您将如何让它更新该属性更改
例如:
withState('value', 'updateValue', (user) => user.name)
来自的原始代码重新组合
const enhance = compose(
withState('value', 'updateValue', ''),
withHandlers({
onChange: props => event => {
props.updateValue(event.target.value)
},
onSubmit: props => event => {
event.preventDefault()
submitForm(props.value)
}
})
)
const Form = enhance(({ value, onChange, onSubmit }) =>
<form onSubmit={onSubmit}>
<label>Value
<input type="text" value={value} onChange={onChange} />
</label>
</form>
)
const enhance=compose(
使用state('value','updateValue',''),
带处理器({
onChange:props=>event=>{
props.updateValue(event.target.value)
},
onSubmit:props=>event=>{
event.preventDefault()
提交表单(道具值)
}
})
)
const Form=enhance({value,onChange,onSubmit})=>
价值
)
鉴于上述示例,我只是进行了分支
v4我似乎有竞争条件,所以我确保这些特定组件在加载完成之前不会渲染。现在我可以回到原来的代码
v3以下内容很有用,也许它们是我可以在重组中使用的更好的方法或工具
withState('value', 'updateValue', ''),
withPropsOnChange(['name'], (props) => assign(props, { value: props.name })),
v2通过删除分支
并使用propsonchange添加,我能够实现我想要的。(或者看起来是这样)
v1第一次尝试:(效果不太好)
const enhance=compose(
分支机构(
({name})=>!name,
无渲染
)
带状态('value','updateValue',({name})=>name),
带处理器({
onChange:props=>event=>{
props.updateValue(event.target.value)
},
onSubmit:props=>event=>{
event.preventDefault()
提交表单(道具值)
}
})
)
const Form=enhance({value,onChange,onSubmit})=>
价值
)
鉴于上述示例,我只是进行了分支
v4我似乎有竞争条件,所以我确保这些特定组件在加载完成之前不会渲染。现在我可以回到原来的代码
v3以下内容很有用,也许它们是我可以在重组中使用的更好的方法或工具
withState('value', 'updateValue', ''),
withPropsOnChange(['name'], (props) => assign(props, { value: props.name })),
v2通过删除分支
并使用propsonchange添加,我能够实现我想要的。(或者看起来是这样)
v1第一次尝试:(效果不太好)
const enhance=compose(
分支机构(
({name})=>!name,
无渲染
)
带状态('value','updateValue',({name})=>name),
带处理器({
onChange:props=>event=>{
props.updateValue(event.target.value)
},
onSubmit:props=>event=>{
event.preventDefault()
提交表单(道具值)
}
})
)
const Form=enhance({value,onChange,onSubmit})=>
价值
)
您可以在状态下异步获取值,然后调用更新程序。
建议在componentDidMount
const enhancer=compose(
带状态('value','updateValue',({name})=>name),
带处理器({
onChange:props=>event=>{
props.updateValue(event.target.value)
},
onSubmit:props=>event=>{
event.preventDefault()
提交表单(道具值)
}
}),
生命周期({
组件安装(){
fetchName().then(this.props.updateValue)
}
}),
分支(({name})=>!name,()=>null)
)
您可以在状态下异步获取值,然后调用更新程序。
建议在componentDidMount
const enhancer=compose(
带状态('value','updateValue',({name})=>name),
带处理器({
onChange:props=>event=>{
props.updateValue(event.target.value)
},
onSubmit:props=>event=>{
event.preventDefault()
提交表单(道具值)
}
}),
生命周期({
组件安装(){
fetchName().then(this.props.updateValue)
}
}),
分支(({name})=>!name,()=>null)
)
从上述实现中弹出一个问题,如果name
属性不存在,则对于从未创建过name属性的用户,表单将永远不会加载。从上述实现中弹出一个问题,如果name
属性不存在,则对于从未创建过name属性的用户,表单将永远不会加载。@lsaddo yea,感谢您的帮助并链接到文档。我通常试图避免使用生命周期,但这是有道理的。@lsaddo是的,谢谢你的建议和链接到文档。我通常试图避免生命周期,但这是有道理的。
const enhance = compose(
branch(
({ name }) => !name,
renderNothing
)
withState('value', 'updateValue', ({ name }) => name),
withHandlers({
onChange: props => event => {
props.updateValue(event.target.value)
},
onSubmit: props => event => {
event.preventDefault()
submitForm(props.value)
}
})
)
const Form = enhance(({ value, onChange, onSubmit }) =>
<form onSubmit={onSubmit}>
<label>Value
<input type="text" value={value} onChange={onChange} />
</label>
</form>
)