React 中的表单提交消息
Form Submit Message in React
我正在尝试显示一条消息“您现在已订阅{SUBSCRIPTION}”。当用户在 React 中提交表单时。我是 React 的新手,所以我觉得我遗漏了一些小东西(希望如此)。
到目前为止,我有如下内容:
constructor(props) {
super(props);
this.state = {
user: {
newsletter: props.newsletter
}
}
}
handleNewsletterInput(event) {
var user = this.state.user;
user.newsletter = event.target.value;
// Update the state object
this.setState({ user: user })
}
handleSubmit(event) {
var user = this.state.user;
user.newsletter = event.target.value;
alert("You are now subscribed to " + { user } + ".")
}
...
render() {
return (
<div>
<h2>Subscribe</h2>
<form onSubmit={this.handleSubmit.bind(this)}>
<label>
<p>Newsletter Type:</p>
<input
id='newsletter'
type='text'
name='newsletter'
value={this.state.user.newsletter}
onChange={this.handleNewsletterInput.bind(this)}
/>
</label>
<button
type='submit'
id='subscribe'
name='subscribe'>
Subscribe
</button>
</form>
</div>
);
...
当我 运行 它时,我收到一条消息说“您现在订阅了 [object Object]”。我做错了什么,我怎样才能让 [object Object] 说出时事通讯的名称?
这不是 React 问题。
alert("You are now subscribed to " + { user } + ".")
此处您将一个对象与一个字符串连接起来。该对象被强制转换为“[object Object]”字符串,因为任何对象 v.toString() 默认情况下(除非明确设置)都将此作为其内存引用。试试这一行:
alert("You are now subscribed to " + JSON.stringify(user) + ".")
and how can I get [object Object] to say the name of the newsletter?
alert("You are now subscribed to " + user.newsletter + ".")
Unfortunately, I receive an error when I do that. alert("You are now subscribed to " + { user.newsletter } + ".")
你在下面问题的评论中提到的这个语法是错误的。 {user.newsletter}
语法不正确,它既不是对象也不是字符串。
编辑 handleNewsletterInput
后添加:
handleNewsletterInput(event) {
var user = this.state.user;
user.newsletter = event.target.value;
// Update the state object
this.setState({ user: user })
}
上面不会更新状态,因为你没有改变user
变量的内存引用。 React 不会知道状态已经改变,因为它会比较 prevState===currentState
并且它会给出 true
,因为它在相同的内存位置。试试这个:
handleNewsletterInput(event) {
const { user } = this.state;
const updatedUser = {
...user,
newsletter: event.target.value
}
// Update the state object
this.setState({ user: updatedUser })
}
编辑 2:
你这里也犯了一个错误-
handleSubmit(event) {
var user = this.state.user;
user.newsletter = event.target.value;
alert("You are now subscribed to " + { user } + ".")
}
这个事件是提交事件,这里不需要前两行。
handleSubmit(event) {
// Do something like send form data to backend here.
alert("You are now subscribed to " + this.state.user.newsletter + ".")
}
我正在尝试显示一条消息“您现在已订阅{SUBSCRIPTION}”。当用户在 React 中提交表单时。我是 React 的新手,所以我觉得我遗漏了一些小东西(希望如此)。
到目前为止,我有如下内容:
constructor(props) {
super(props);
this.state = {
user: {
newsletter: props.newsletter
}
}
}
handleNewsletterInput(event) {
var user = this.state.user;
user.newsletter = event.target.value;
// Update the state object
this.setState({ user: user })
}
handleSubmit(event) {
var user = this.state.user;
user.newsletter = event.target.value;
alert("You are now subscribed to " + { user } + ".")
}
...
render() {
return (
<div>
<h2>Subscribe</h2>
<form onSubmit={this.handleSubmit.bind(this)}>
<label>
<p>Newsletter Type:</p>
<input
id='newsletter'
type='text'
name='newsletter'
value={this.state.user.newsletter}
onChange={this.handleNewsletterInput.bind(this)}
/>
</label>
<button
type='submit'
id='subscribe'
name='subscribe'>
Subscribe
</button>
</form>
</div>
);
...
当我 运行 它时,我收到一条消息说“您现在订阅了 [object Object]”。我做错了什么,我怎样才能让 [object Object] 说出时事通讯的名称?
这不是 React 问题。
alert("You are now subscribed to " + { user } + ".")
此处您将一个对象与一个字符串连接起来。该对象被强制转换为“[object Object]”字符串,因为任何对象 v.toString() 默认情况下(除非明确设置)都将此作为其内存引用。试试这一行:
alert("You are now subscribed to " + JSON.stringify(user) + ".")
and how can I get [object Object] to say the name of the newsletter?
alert("You are now subscribed to " + user.newsletter + ".")
Unfortunately, I receive an error when I do that.
alert("You are now subscribed to " + { user.newsletter } + ".")
你在下面问题的评论中提到的这个语法是错误的。 {user.newsletter}
语法不正确,它既不是对象也不是字符串。
编辑 handleNewsletterInput
后添加:
handleNewsletterInput(event) {
var user = this.state.user;
user.newsletter = event.target.value;
// Update the state object
this.setState({ user: user })
}
上面不会更新状态,因为你没有改变user
变量的内存引用。 React 不会知道状态已经改变,因为它会比较 prevState===currentState
并且它会给出 true
,因为它在相同的内存位置。试试这个:
handleNewsletterInput(event) {
const { user } = this.state;
const updatedUser = {
...user,
newsletter: event.target.value
}
// Update the state object
this.setState({ user: updatedUser })
}
编辑 2: 你这里也犯了一个错误-
handleSubmit(event) {
var user = this.state.user;
user.newsletter = event.target.value;
alert("You are now subscribed to " + { user } + ".")
}
这个事件是提交事件,这里不需要前两行。
handleSubmit(event) {
// Do something like send form data to backend here.
alert("You are now subscribed to " + this.state.user.newsletter + ".")
}