具有相同类型/值和不同类型的反应道具
React Props with same type/ value and different types
我有一个通过 Material-ui 创建的以下文本文件。
<TextField
error = {this.props.projectNameErrorStatus}
required = {this.props.projectNameRequiredStatus}
className={classes.textField}
margin="normal"
id="projectName"
name="projectName"
/>
但是,我有 4 个不同的 TextField,我将使用不同的名称为它们设置错误道具,以获取父容器的状态。这个问题将迫使我拥有 8 个不同的道具和状态名称。这将使我的代码更大且可读性更差。
例如我必须启动状态:
state = {
projectNameErrorStatus :true,
NameErrorStatus :true,
FamilyErrorStatus :true,
EmailErrorStatus :true,
projectNameRequiredStatus: true,
NameRequiredStatus: true,
FamilyRequiredStatus: true,
EmailRequiredStatus: true,
}
state = {this.state}
然后将它们作为 props 传递给子组件。之后我应该把它们都用作道具。
let {
state = {
projectNameErrorStatus,
NameErrorStatus,
FamilyErrorStatus,
EmailErrorStatus,
projectNameRequiredStatus,
NameRequiredStatus,
FamilyRequiredStatus,
EmailRequiredStatus
} = this.props.state
我能否以更清洁、更高效的方式拥有这些道具和状态?
将其拆分为两个组件并使用 json 个对象:
import React from 'react';
class customTextfield extends Component {
render() {
return (
<TextField
error={this.props.ErrorStatus}
required={this.props.RequiredStatus}
className={classes.textField}
margin="normal"
id={this.props.Name}
name={this.props.Name}
label={this.props.Label} />
);
}
}
class parentContainer extends Component {
constructor(props) {
super(props);
this.state = {
ErrorStatus = {
Name: true,
Email: false,
Project: false,
Family: false
},
RequiredStatus = {
Name: true,
Email: true,
Project: true,
Family: false
},
listOfTextFields =["Name", "Email", "Project", "Family"]
}
}
render() {
return this.state.listOfTextFields.map(field => <customTextfield Name={field} Label={field} ErrorStatus={this.state.ErrorStatus[field]} RequiredStatus={this.state.RequiredStatus[field]} />)
};
}
我有一个通过 Material-ui 创建的以下文本文件。
<TextField
error = {this.props.projectNameErrorStatus}
required = {this.props.projectNameRequiredStatus}
className={classes.textField}
margin="normal"
id="projectName"
name="projectName"
/>
但是,我有 4 个不同的 TextField,我将使用不同的名称为它们设置错误道具,以获取父容器的状态。这个问题将迫使我拥有 8 个不同的道具和状态名称。这将使我的代码更大且可读性更差。 例如我必须启动状态:
state = {
projectNameErrorStatus :true,
NameErrorStatus :true,
FamilyErrorStatus :true,
EmailErrorStatus :true,
projectNameRequiredStatus: true,
NameRequiredStatus: true,
FamilyRequiredStatus: true,
EmailRequiredStatus: true,
}
state = {this.state}
然后将它们作为 props 传递给子组件。之后我应该把它们都用作道具。
let {
state = {
projectNameErrorStatus,
NameErrorStatus,
FamilyErrorStatus,
EmailErrorStatus,
projectNameRequiredStatus,
NameRequiredStatus,
FamilyRequiredStatus,
EmailRequiredStatus
} = this.props.state
我能否以更清洁、更高效的方式拥有这些道具和状态?
将其拆分为两个组件并使用 json 个对象:
import React from 'react';
class customTextfield extends Component {
render() {
return (
<TextField
error={this.props.ErrorStatus}
required={this.props.RequiredStatus}
className={classes.textField}
margin="normal"
id={this.props.Name}
name={this.props.Name}
label={this.props.Label} />
);
}
}
class parentContainer extends Component {
constructor(props) {
super(props);
this.state = {
ErrorStatus = {
Name: true,
Email: false,
Project: false,
Family: false
},
RequiredStatus = {
Name: true,
Email: true,
Project: true,
Family: false
},
listOfTextFields =["Name", "Email", "Project", "Family"]
}
}
render() {
return this.state.listOfTextFields.map(field => <customTextfield Name={field} Label={field} ErrorStatus={this.state.ErrorStatus[field]} RequiredStatus={this.state.RequiredStatus[field]} />)
};
}