在四中已经完成了整个项目框架的搭建,现在开始做一个简单的form表单加上组件,这里面包含了组件之间的消息传递,
分别是父——>子,子——>父之间的传值。
1.下载antd-mobile与rc-form
在入口文件中引入
import React from "react";
import ReactDOM from 'react-dom';
import App from "../components/App"
import 'antd-mobile/dist/antd-mobile.css';
import registerServiceWorker from "../service/registerServiceWorker";
ReactDOM.render(
<App/>,
document.getElementById("app")
);
registerServiceWorker();
2. 要先弄清楚react的生命周期
1. 组件加载的时候触发的函数
constructor
ComponentWillMount
render
componentDidMount
一般dom操作和请求数据回放在这个地方
2. 组件更新时候触发的函数
shouldComponentUpdat
componenWillUpdate
Render
ComponentDidUpdate
这个地方修改state的值就会触发
3.在父组件里面改变props传值的时候触发的
componentWillReceiveProps
4. 组件销毁的时候触发
componentWillUnmount
3. 上面这些都搞清楚了,什么大篇幅的理论我不会说了,直接看代码好了
import React, {Component} from "react";
import {List, InputItem, Button, WingBlank, Checkbox, Flex} from "antd-mobile";
import {createForm} from "rc-form";
import Agreement from "../AgreementComponent/agreement";
import "../../../assets/css/resister.less";
const AgreeItem = Checkbox.AgreeItem;
/**
* @author Visupervi
* @date 2019/9/18 12:11
* @name Register
* @param 1.isChecked控制checkeBox是否可以选中,2.isShow控制组件是否显示
@return
*/
class Register extends Component {
constructor(props) {
super(props);
this.state = {
userInfo: [
{
title: "用户名",
formName: {
name: "managerName",
value: ""
},
// imageUrl: require("../assets/images/name.png"),
placeHolder: "请输入用户名"
},
{
title: "企业名",
formName: {
name: "custName",
value: ""
},
// imageUrl: require("../assets/images/enterprise.png"),
placeHolder: "请输入企业名称"
},
{
title: "行业名",
formName: {
name: "industry",
value: ""
},
// imageUrl: require("../assets/images/industry.png"),
placeHolder: "请输入行业名"
},
{
title: "手机号",
formName: {
name: "managerPhone",
value: ""
},
// imageUrl: require("../assets/images/tel.png"),
placeHolder: "请输入联系人手机号"
},
{
title: "职位",
formName: {
name: "managerPosition",
value: ""
},
// imageUrl: require("../assets/images/position.png"),
placeHolder: "请输入系人职位"
},
{
title: "推荐人",
formName: {
name: "referrer",
value: ""
},
// imageUrl: require("../assets/images/referrer.png"),
placeHolder: "请输入推荐人姓名"
},
{
title: "员工规模",
formName: {
name: "staffSize",
value: ""
},
// imageUrl: require("../assets/images/staff.png"),
placeHolder: "请输入员工规模"
},
{
title: "门店规模",
formName: {
name: "shopSize",
value: ""
},
// imageUrl: require("../assets/images/store.png"),
placeHolder: "请输入门店规模"
},
],
isChecked: false,
isShow:false
}
}
//提交函数
submit() {
this.props.form.validateFields((err, val) => {
console.log(err, val);
})
}
//取消函数
cancelSubmit() {
for (let i = 0; i < this.state.userInfo.length; i++) {
this.props.form.resetFields()
}
}
//check函数
handleChecked(event) {
console.log(event.target.checked);
console.log("3333");
console.log(this.state.isShow)
if(this.state.isChecked){
console.log(233);
this.setState({
isChecked: event.target.checked
});
return
}
console.log(456);
}
//阅读组件弹出
handleAgreement(event) {
event.preventDefault();
this.setState({
isShow:!this.state.isShow
})
}
//接受子组件传递的值
getChildMsg(msg){
this.setState({
isShow:!msg.isShow,
isChecked:msg.isChecked
})
}
componentDidUpdate(prevProps, prevState, snapshot) {
}
render() {
const {getFieldProps} = this.props.form;
return (
<div className={"list-wrap"}>
<List>
{
this.state.userInfo.map((item, index, array) => {
return (
<InputItem
{...getFieldProps(item.formName.name, {
initialValue: item.formName.value
})}
clear
placeholder={item.placeHolder}
key={index}
type={item.formName.name}
>{item.title}</InputItem>
)
})
}
</List>
<div className={"checkBox-wrap"}>
<Flex>
<Flex.Item>
<AgreeItem data-seed="logId" onChange={this.handleChecked.bind(this)} checked={this.state.isChecked} >
<a onClick={this.handleAgreement.bind(this)}>《请阅读用户服务协议》</a>
</AgreeItem>
</Flex.Item>
</Flex>
</div>
<div className={"btn-wrap"}>
<WingBlank>
<Button type="primary" onClick={this.submit.bind(this)}>提交</Button>
<Button type="warning" onClick={this.cancelSubmit.bind(this)}>取消</Button>
</WingBlank>
</div>
<Agreement msg={{isShow:this.state.isShow,isChecked:this.state.isChecked}} getMsg={this.getChildMsg.bind(this)}></Agreement>
</div>
)
}
}
const registerComponent = createForm()(Register);
export default registerComponent;
import React, {Component} from "react";
import {List, InputItem, Button, WingBlank, Checkbox, Flex} from 'antd-mobile';
import '../../../assets/css/agreement.less'
class Agreement extends Component {
constructor(props) {
super(props);
this.timer="";
this.state = {
isShow: false,
isChecked:false
}
}
//1.给父组件传值,让其checkBox选中,2.关闭子组件
handleFun(msg){
clearInterval(this.timer);
this.setState({
isShow:false,
isChecked:true
});
this.props.getMsg({isShow:this.state.isShow,isChecked:this.state.isChecked});
}
componentDidUpdate(prevProps, prevState, snapshot) {
clearInterval(this.timer);
this.timer = setInterval(()=>{
console.log(this.props.msg)
this.setState({
isShow:this.props.msg.isShow,
isChecked:!this.props.msg.isChecked,
},()=>{
clearInterval(this.timer)
})
},0);
}
componentWillUnmount() {
}
render() {
if (this.state.isShow) {
return (
<div className={"agreement"}>
<div className={"btn-wrap"}>
<WingBlank>
<Button type="primary" onClick={this.handleFun.bind(this)}>同意并继续</Button>
</WingBlank>
</div>
</div>
)
} else {
return ("")
}
}
}
export default Agreement;
6.演示

完整代码:
github.com/Visupervi/r…