gpt4 book ai didi

reactjs - defaultValue 更改不会重新渲染输入

转载 作者:行者123 更新时间:2023-12-03 13:23:03 27 4
gpt4 key购买 nike

我不知道为什么这不起作用

Demo

我有以下 es6 代码

const {createFactory, createClass, DOM: { label, input, button }} = React;

const tester = createFactory(createClass({
render() {
return label({}
,`Name: ${this.props.name}`
,input({defaultValue: this.props.name})
,button({onClick: this.changeName}, "Change")
)
},
changeName() {
this.setProps({name: "Wilma"})
}
}) )

React.render(tester({name: "Fred"}), document.querySelector('body'))

点击按钮明显改变了 props,但旧的 defaultValue 仍然在输入中!那么什么给出呢?我究竟做错了什么?这是一个错误吗?有解决办法吗?

最佳答案

我找到了一个似乎非常好的解决方案:使用 key 属性强制渲染全新的输入

在我的特定情况下,我不需要使用自己的 onChange 属性来控制 input,因为它周围的 form最终控制填充 defaultValue 的某个存储中的状态。但存储的状态可能是异步初始化/更新的,在这种情况下,应该更新 defaultValue 。所以这是我的具体案例的浓缩版本:

import React, { PropTypes } from 'react';
import { Form } from 'provide-page';

const GatherContact = ({
classes,
onSubmit,
movingContactName,
movingContactEmail,
movingContactPhone,
userName,
userEmail,
userPhone
}) => (
<Form onSubmit={onSubmit}>
<div className={classes.GatherContact}>
<h2 className={classes.GatherHeading}>
How can we contact you?
</h2>

<input
type="text"
className={classes.GatherContactInput}
placeholder="Name"
name="movingContactName"
key={`movingContactName:${movingContactName || userName}`}
defaultValue={movingContactName || userName}
required={true}
/>

<input
type="email"
className={classes.GatherContactInput}
placeholder="Email"
name="movingContactEmail"
key={`movingContactEmail:${movingContactEmail || userEmail}`}
defaultValue={movingContactEmail || userEmail}
required={true}
/>

<input
type="tel"
className={classes.GatherContactInput}
placeholder="Phone"
name="movingContactPhone"
key={`movingContactPhone:${movingContactPhone || userPhone}`}
defaultValue={movingContactPhone || userPhone}
required={true}
/>

{userName
? undefined
: (
<input
type="password"
className={classes.GatherContactInput}
placeholder="Password"
name="userPassword"
required={true}
autoComplete="new-password"
/>
)
}
</div>
</Form>
);

GatherContact.propTypes = {
classes: PropTypes.object.isRequired,
onSubmit: PropTypes.func.isRequired,
movingContactName: PropTypes.string.isRequired,
movingContactEmail: PropTypes.string.isRequired,
movingContactPhone: PropTypes.string.isRequired,
userName: PropTypes.string.isRequired,
userEmail: PropTypes.string.isRequired,
userPhone: PropTypes.string.isRequired
};

export default GatherContact;

关于reactjs - defaultValue 更改不会重新渲染输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30792526/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com