Sri*_*wda 10 javascript reactjs
假设一个页面包含多阶段表单,在表单的第一阶段包含名称的输入字段,在第二阶段它包含文件的输入,onChange 设置名称和文件的状态值,但是当我们像第一阶段到第二阶段一样来回移动时阶段和第二阶段,我们可以保存输入类型名称的值,但如何保存输入类型文件的值。
import React, { Component } from "react";
class App extends Component {
constructor(props) {
super(props);
this.state = {
pageone: true,
pagetwo: false,
pagethree: false,
pageonedata: "",
pagetwodata: "",
pagethreedata: ""
};
this.nextPage = this.nextPage.bind(this);
this.prevPage = this.prevPage.bind(this);
this.togglePage = this.togglePage.bind(this);
}
prevPage() {
if (this.state.pagetwo === true) {
this.setState({
pageone: !this.state.pageone,
pagetwo: !this.state.pagetwo
});
} else if (this.state.pagethree === true) {
this.setState({
pagethree: !this.state.pagethree,
pagetwo: !this.state.pagetwo
});
}
}
nextPage() {
if (this.state.pageone === true) {
this.setState({
pageone: !this.state.pageone,
pagetwo: !this.state.pagetwo
});
} else if (this.state.pagetwo === true) {
this.setState({
pagetwo: !this.state.pagetwo,
pagethree: !this.state.three
});
}
}
togglePage() {
this.setState({
pageone: !this.state.pageone,
pagetwo: !this.state.pagetwo
});
}
handleChange = e => {
this.setState({ ...this.state, [e.target.name]: e.target.value });
};
handleChange = e => {
this.setState({ ...this.state, [e.target.name]: e.target.files[0] });
};
render() {
return (
<div style={{ margin: "250px 500px" }}>
{this.state.pageone && (
<form>
<label>
<h4>page one</h4>
</label>
<input
type="text"
name="pageonedata"
value={this.state.pageonedata}
onChange={this.handleChange}
/>
</form>
)}
{this.state.pagetwo && (
<form>
<label>
<h4>page two</h4>
</label>
<input
type="file"
name="pagetwodata"
value={this.state.pagetwodata}
onChange={this.handleFile}
/>
</form>
)}
{this.state.pagethree && (
<form>
<label>
<h4>page three</h4>
</label>
<input
type="text"
name="pagethreedata"
value={this.state.pagethreedata}
onChange={this.handleChange}
/>
</form>
)}
<br />
<button
type="submit"
onClick={this.prevPage}
disabled={this.state.pageone ? true : false}
>
previous
</button>{" "}
<button
type="submit"
onClick={this.nextPage}
disabled={this.state.pagethree ? true : false}
>
next
</button>{" "}
<button
type="submit"
onClick={this.togglePage}
disabled={this.state.pagethree ? false : true}
>
finish
</button>
</div>
);
}
}
export default App;
Run Code Online (Sandbox Code Playgroud)
Tho*_*lle 15
您不能以编程方式将文件插入到输入元素中,只有用户可以这样做,因此将文件保留在输入中的最佳方法是display:none;在表单上有条件地设置而不是从 DOM 中删除它。
例子
class App extends Component {
// ...
handleFile = e => {
this.setState({ ...this.state, [e.target.name]: e.target.files[0] });
};
render() {
return (
{/* ... */}
<form style={{ display: this.state.pagetwo ? 'block' : 'none' }}>
<label>
<h4>page two</h4>
</label>
<input
type="file"
name="pagetwodata"
value={this.state.pagetwodata}
onChange={this.handleFile}
/>
</form>
{/* ... */}
);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13816 次 |
| 最近记录: |