未经测试的代码,但如果您更改以下内容,它应该可以工作:
改变这个:
this.state ={
mediaFields: [],
content: [],
mediaUrls: [ null, null, null ],
mediaContents: [ {'', '', ''],
};
To:
this.state ={
mediaFields: [],
content: [],
data: [],
};
并改变:
handleChangeUrl(e, index) {
// Shallow copy of array
const mediaUrls = this.state.mediaUrls.slice();
let url = e.target.value
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
mediaUrls[index] = url;
this.setState({ mediaUrls});
}
To:
handleChangeUrl(e, index) {
// Shallow copy of array
const tempData = this.state.data.slice();
let url = e.target.value
if (!/^https?:\/\//i.test(url)) {
url = 'http://' + url;
}
tempData[index].link = url;
this.setState({ tempData });
}
并改变:
handleChangeContent(e, index) {
// Shallow copy of array
const mediaContents = this.state.mediaContents.slice();
mediaContents[index] = e.target.value;
this.setState({ mediaContents });
}
To:
handleChangeContent(e, index) {
// Shallow copy of array
const tempData = this.state.data.slice();
tempData[index].content = e.target.value;
this.setState({ tempData });
}
最后:
add() {
event.preventDefault();
const mediaFields = this.state.mediaFields.concat(MediaInput);
if (i < 3) {
this.setState({ mediaFields });
i++
} else {
Bert.alert('Only 3 media links are allowed', 'danger');
}
}
remove() {
event.preventDefault();
const lastElement = this.state.mediaFields.pop();
const mediaFields = this.state.mediaFields;
this.setState({ mediaFields });
i--;
}
To:
add() {
event.preventDefault();
const mediaFields = this.state.mediaFields.concat(MediaInput);
const data = this.state.data.slice();
data.push({ link: "", content: "" });
if (i < 3) {
this.setState({ data, mediaFields });
i++
} else {
Bert.alert('Only 3 media links are allowed', 'danger');
}
}
remove() {
event.preventDefault();
const lastElement = this.state.mediaFields.pop();
const mediaFields = this.state.mediaFields;
const data = this.state.data.slice();
data.pop();
this.setState({ data, mediaFields });
i--;
}
注意:已被编辑以修复最后的大量更改!