React handleSubmit return 值到 dom
React handleSubmit return value to dom
我正在尝试编写一个非常基本的 MadLibs 游戏以了解有关 React.js 的更多信息,我 运行 遇到用户输入值(名称)和然后 handleSubmit
returns 它到 dom。我这里好像漏了什么,不知道是什么。
我想这样做,当用户回答一个问题时,他们会在所有内容发布到 DOM 之前再问 2 个问题。
它既不发布也不工作,我没有错误知道发生了什么,它根本不会写入 DOM
我的代码是:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {
value: 'start',
newValue: '',
submitted: false
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({ value: event.target.value });
event.preventDefault();
}
handleSubmit(event) {
event.preventDefault();
console.log('submit worked!!!');
return <div>{this.state.value}</div>;
}
render() {
return (
<div
style={{
marginTop: '50px',
color: 'white',
top: '25px',
position: 'absolute'
}}
>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input
type="text"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
);
}
}
export default NameForm;
提前致谢
此代码不起作用的原因是因为您没有告诉 React 更新虚拟 DOM。在你的函数中你 return JSX,
return <div>{this.state.value}</div>;
但是 React 与此有什么关系?你必须告诉应用程序你想做什么。它可以通过几种方式完成(比如如果你使用的是 redux,我会推荐使用 reducer),但我会推荐条件渲染。在答案框中准确写出您需要的内容有点困难,所以这里有一个 link 可能比我解释得更好。如果您有任何问题,请告诉我,如果您真的需要一些代码示例,我会把它们写出来。
handleSubmit(event) {
event.preventDefault();
console.log('submit worked!!!');
let toggle = this.state.visable;
this.setState({ visable: !toggle });
}
render() {
const divStyle = {
marginTop: '50px',
color: 'white',
top: '25px',
position: 'absolute'
};
let question = null;
const show = this.state.visable;
if(show){
question = <div>{this.state.value}</div> ;
}
return (
<div>
<div style={divStyle}>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input
type="text"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
<div>
{question}
</div>
</div>
);
}
https://facebook.github.io/react/docs/conditional-rendering.html
我觉得你绑定错了。
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
这意味着您 this 的值将始终是父组件,而不是您尝试设置的 event.target.value。
只需删除这些行,它应该可以工作,因为 this 应该成为调用者上下文(例如输入字段),这意味着您的 event.target.value 应该正确获取和设置输入的内容。
此外,您不应在 handleSubmit 上返回,而应在 render() 方法中设置有条件呈现的内容,并且 handle submit 应设置一个状态 属性,例如 hasSubmitted,您可以检查渲染以有条件地渲染表单或其他内容。
我正在尝试编写一个非常基本的 MadLibs 游戏以了解有关 React.js 的更多信息,我 运行 遇到用户输入值(名称)和然后 handleSubmit
returns 它到 dom。我这里好像漏了什么,不知道是什么。
我想这样做,当用户回答一个问题时,他们会在所有内容发布到 DOM 之前再问 2 个问题。
它既不发布也不工作,我没有错误知道发生了什么,它根本不会写入 DOM
我的代码是:
class NameForm extends React.Component {
constructor(props) {
super(props);
this.state = {
value: 'start',
newValue: '',
submitted: false
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(event) {
this.setState({ value: event.target.value });
event.preventDefault();
}
handleSubmit(event) {
event.preventDefault();
console.log('submit worked!!!');
return <div>{this.state.value}</div>;
}
render() {
return (
<div
style={{
marginTop: '50px',
color: 'white',
top: '25px',
position: 'absolute'
}}
>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input
type="text"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
);
}
}
export default NameForm;
提前致谢
此代码不起作用的原因是因为您没有告诉 React 更新虚拟 DOM。在你的函数中你 return JSX,
return <div>{this.state.value}</div>;
但是 React 与此有什么关系?你必须告诉应用程序你想做什么。它可以通过几种方式完成(比如如果你使用的是 redux,我会推荐使用 reducer),但我会推荐条件渲染。在答案框中准确写出您需要的内容有点困难,所以这里有一个 link 可能比我解释得更好。如果您有任何问题,请告诉我,如果您真的需要一些代码示例,我会把它们写出来。
handleSubmit(event) {
event.preventDefault();
console.log('submit worked!!!');
let toggle = this.state.visable;
this.setState({ visable: !toggle });
}
render() {
const divStyle = {
marginTop: '50px',
color: 'white',
top: '25px',
position: 'absolute'
};
let question = null;
const show = this.state.visable;
if(show){
question = <div>{this.state.value}</div> ;
}
return (
<div>
<div style={divStyle}>
<form onSubmit={this.handleSubmit}>
<label>
Name:
<input
type="text"
value={this.state.value}
onChange={this.handleChange}
/>
</label>
<input type="submit" value="Submit" />
</form>
</div>
<div>
{question}
</div>
</div>
);
}
https://facebook.github.io/react/docs/conditional-rendering.html
我觉得你绑定错了。
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
这意味着您 this 的值将始终是父组件,而不是您尝试设置的 event.target.value。
只需删除这些行,它应该可以工作,因为 this 应该成为调用者上下文(例如输入字段),这意味着您的 event.target.value 应该正确获取和设置输入的内容。
此外,您不应在 handleSubmit 上返回,而应在 render() 方法中设置有条件呈现的内容,并且 handle submit 应设置一个状态 属性,例如 hasSubmitted,您可以检查渲染以有条件地渲染表单或其他内容。