reactjs - 如何在 React 中进行参数传递
问题描述
我被困在这里,因为我是新来的反应,我的问题是如何在反应中通过道具传递论点。
这是我的代码,我想将一个参数从 oneComponent.js 传递给 anotherComponentjs。
OneComponentJs:
const EditProfile = props => {
const avtar = [
"avtar/avtar1.png",
"avtar/avtar2.png",
"avtar/avtar3.png",
"avtar/avtar4.png",
"avtar/avtar9.png",
"avtar/avtar7.png"
];
const avtars = (
<CardGroup>
{avtar.map((_avtar, index) => {
return (
<Card key={index}>
<Image src={avtar[index]} thumbnail />
<Button type="checkbox" variant="dark">
Select me
</Button>
</Card>
);
})}
</CardGroup>
);
let getName = event => {
return event.target.value;
};
let getEmail = event => {
return event.target.value;
};
return (
<div>
<Form onSubmit={props.edit(getName, getEmail, avtar[3])}>
<Form.Group>
<Form.Label className="text-info">Name</Form.Label>
<Form.Control
type="text"
placeholder={props.name}
onChange={getName}
/>
</Form.Group>
<Form.Group>
<Form.Label className="text-info">Email</Form.Label>
<Form.Control
type="text"
placeholder={props.email}
onChange={getEmail}
/>
</Form.Group>
<Form.Group>
<Form.Label className="text-info">Choose Avatar</Form.Label>
{avtars}
</Form.Group>
<Form.Group>
<Button type="submit">Update Your Profile</Button>
</Form.Group>
</Form>
</div>
);
};
export default EditProfile;
另一个组件.js
class Profile extends Component {
state = {
profile: {
name: "Pramod",
email: "pramod@gmail.com",
avatar: "avtar/avtar1.png",
dept: "HRDD"
}
};
profileEditor = (_name, _email, _avatar) => {
this.setState = {
profile: {
name: _name,
email: _email,
avatar: _avatar,
dept: "HRDD"
}
};
};
render() {
return (
<div>
<Row className="h-100">
<Col xs lg={3}>
<Card className="m-2 border-0">
<Card.Body className="border-0 p-0">
<Image
className="border-0 "
src={this.state.profile.avatar}
thumbnail
/>
</Card.Body>
<Card.Footer className="border-bottom ">
<label className="h1 ">{this.state.profile.name}</label>
<br />
<label>{this.state.profile.email}</label>
<br />
<Button size="lg" variant="secondary" className="my-4" block>
Edit profile
</Button>
<Image
src="icon/dept.png"
style={{ height: "30px", width: "30px" }}
/>
<label className="text-primary ml-2">
{this.state.profile.dept}
</label>
</Card.Footer>
</Card>
</Col>
<Col xs lg={9}>
<Col lg={11}>
<Tabs defaultActiveKey="edit" className="mt-3 border-bottom">
<Tab eventKey="files" title="Files" className="border-off">
<Row className="mt-3 px-4">
<Col lg={6}>
<Folder />
</Col>
<Col lg={6}>
<Folder />
</Col>
</Row>
</Tab>
<Tab
eventKey="addFiles"
title="Add File"
className="border-off"
>
<Addfile />
</Tab>
<Tab
eventKey="fileUnderProcess"
title="File Under Process"
className="border-0"
>
3
</Tab>
<Tab
eventKey="rejectFile"
title="Rejected File"
className="border-0"
>
4
</Tab>
<Tab eventKey="edit" title="Edit Profile" className="border-0">
<EditProfile
name={this.state.profile.name}
email={this.state.profile.email}
edit={this.profileEditor}
/>
</Tab>
</Tabs>
</Col>
</Col>
</Row>
</div>
);
}
}
导出默认配置文件;
这样我就可以得到这三个参数,这将改变我的状态。
解决方案
在你的 oneComponent.js 中维护一些状态,然后将其传递给 anotherComponent.js。例如
OneComponent.js
state = {
['name']: '',
['email']: ''
}
let onNameChange = event => { // bind this function to your input field
this.setState({['name']: event.target.value})
};
let onEmailChange = event => {
this.setState({['email']: event.target.value})
};
onSubmit = e => {
e.preventDefault();
this.props.edit(this.state);
}
<Form onSubmit={this.onSubmit}>
</Form>
另一个组件.js
profileEditor = formData => {
this.setState = {
profile: {
name: formData.name,
email: formData.email,
dept: "HRDD"
}
};
};
干杯;)
推荐阅读
- java - 使用 JDBC 调用 SQL Server 时无法解决未分类的 SQLException
- jquery - 在我的情况下,如何在 ASP.Net 视图页面的 foreach 中制作 If 语句?
- ruby-on-rails - 如何使用 ActionText 显示嵌入视频
- javascript - TypeError:无法读取节点红色函数节点中未定义的属性“推送”
- python-3.x - 读取 csv 文件中的 col 并在另一个中写入一行
- bash - 如何在脚本中使用 telnet?
- reactjs - 如何在打字稿中调用使用钩子的函数?
- ios - 尝试在默认区域 CloudKit 中共享 CKRecord 时出错
- c - 不能释放动态矩阵
- java - Quartz - 我尝试将实体保存到数据库时出现空指针