【发布时间】:2023-04-01 00:00:02
【问题描述】:
我需要能够将其组合成一个功能。有 2 个独立的数组...
{this.state.telephoneType.map((telephoneType, ttidx) => ())}
还有……
{this.state.telephone.map((telephone, tidx) => ())}
基本上,这是因为我有一个连接 2 个函数的按钮,并且它必须位于行类 (MDBRow) 之外,因此 UI 不会中断。
<MDBRow className="grey-text no-gutters my-2">
{this.state.telephoneType.map((telephoneType, ttidx) => (
<MDBCol md="4" className="mr-2">
<select
key={ttidx}
defaultValue={telephoneType.name}
onChange={this.handleTelephoneTypeChange(ttidx)}
className="browser-default custom-select">
<option value="Mobile">Mobile</option>
<option value="Landline">Landline</option>
<option value="Work">Work</option>
</select>
</MDBCol>
))}
{this.state.telephone.map((telephone, tidx) => (
<MDBCol md="7" className="d-flex align-items-center">
<input
value={telephone.name}
onChange={this.handleTelephoneChange(tidx)}
placeholder={`Telephone No. #${tidx + 1}`}
className="form-control"
/>
<MDBIcon icon="minus-circle"
className="mr-0 ml-2 red-text"
onClick={this.handleRemoveTelephone(tidx)} />
</MDBCol>
))}
</MDBRow>
<div className="btn-add" onClick={this.handleAddTelephone}>
<MDBIcon className="mr-1" icon="plus-square" />
Add Telephone
</div>
这是handleAddTelephone函数...
handleAddTelephone = () => {
this.setState({
telephone: this.state.telephone.concat([{ name: "" }]),
telephoneType: this.state.telephoneType.concat([{ name: "" }])
});
};
构造函数看起来像这样......
class InstallerAdd extends React.Component {
constructor() {
super();
this.state = {
role: "Installer",
name: "",
telephoneType: [{ name: "" }],
telephone: [{ name: "" }],
tidx: "",
emailType: [{ email: "" }],
email: [{ email: "" }],
eidx: "",
notes: ""
};
}
}
我可以将一个数组嵌套在另一个数组中吗?我不知道如何做到这一点,所以任何建议表示赞赏。谢谢。
编辑: 这些是需要成为 1 个功能的 2 个电话功能... 我已经为每个更新了新的嵌套数组
handleTelephoneChange = tidx => evt => {
const newTelephone = this.state.telephone.type.map((telephone, tsidx) => {
if (tidx !== tsidx) return telephone;
return { ...telephone, name: evt.target.value };
});
this.setState({ telephone: newTelephone }, () => {
// get state on callback
console.log(this.state.telephone.number[tidx].name)
}
);
};
handleTelephoneTypeChange = ttidx => evt => {
const newTelephoneType = this.state.telephone.number.map((telephoneType, ttsidx) => {
if (ttidx !== ttsidx) return telephoneType;
return { ...telephoneType, name: evt.target.value };
});
this.setState({ telephoneType: newTelephoneType }, () => {
// get state on callback
console.log(this.state.telephone.type[ttidx].name)
}
);
};
我的构造函数现在看起来像这样......
class InstallerAdd extends React.Component {
constructor() {
super();
this.state = {
role: "Installer",
name: "",
telephone: {
type: [{ name: "" }],
number: [{ name: "" }]
},
tidx: "",
emailType: [{ email: "" }],
email: [{ email: "" }],
eidx: "",
notes: ""
};
}
【问题讨论】:
-
如果您展示您期望从 2 个示例数组中获得的单个数组,将会更容易理解
-
您是否想要一个这样的数组:
telephone: [{ type: "...", phone: "..."}, ...]?我不认为你必须诚实有什么问题。你想完成什么? -
您可以在此处看到它破坏了 UI,因为该函数需要围绕 Row 类进行包装。这对于 2 个功能是不可能的。 screencast.com/t/HksUkk7g3G 我会尝试建议的。谢谢。
-
我想目前尚不清楚 UI 是如何中断的,也不清楚您要求什么或您的预期结果应该是什么。现在听起来好像您只需要一个处理程序来处理两个更新案例。
-
@DrewReese 我回来了,是的,你是对的,我需要一个处理程序,所以当我调用 handleAddTelephone 函数时,我可以调用“电话”而不是电话类型和电话。请看我的截屏视频,它显示了当我调用 handleAddTelephone screencast.com/t/HksUkk7g3G 时会发生什么
标签: arrays reactjs nested concat