【发布时间】:2019-06-23 04:26:08
【问题描述】:
我有一个包含以下内容的单表单应用程序:
- 导航栏组件
- 表单组件(包含表单域)
- 复选框组件(条款和条件)
- 提交按钮组件
- ThankYouPage 组件
当用户填写表单时,组件 1-4 最初显示在屏幕上。当用户单击提交按钮时,我希望他或她被路由到感谢页面。在观看教程并添加路线后,当用户单击提交时,唯一发生的事情是,ThankYouPage 组件文本出现在表单下方。我希望所有其他组件都消失,唯一剩下的就是ThankYouPage 组件。谁能告诉我我做错了什么?
App.js
import React from 'react';
import NavBar from './Components/NavBar'
import Form from './Components/InfoForm'
import SubmitButton from './Components/SubmitButton';
import Container from '@material-ui/core/Container';
import Checkbox from './Components/Checkbox';
import { BrowserRouter as Router, Route } from 'react-router-dom';
import './App.css';
import ThankYou from './Components/ThankYou';
function App() {
const [state, setState] = React.useState({
checkbox: false,
});
const [values, setValues] = React.useState({
name: '',
age: '',
email: ''
});
const handleChangeForm = name => event => {
setValues({ ...values, [name]: event.target.value });
};
const handleChange = event => {
setState({ ...state, [event.target.name]: event.target.checked });
};
return (
<Router>
<div>
<Container maxWidth="md">
<NavBar />
<Form values={values} handleChangeForm={handleChangeForm} />
<Checkbox name="checkbox" onChange={handleChange} checked={state.checkbox} />
<SubmitButton isEnabled={state.checkbox} values={values}/>
</Container>
</div>
<Route path="/thankyou" component={ThankYou} />
</Router>
);
}
export default App;
SubmitButton.js
import React from 'react';
import { makeStyles } from '@material-ui/core/styles';
import Button from '@material-ui/core/Button';
import { Link } from 'react-router-dom';
export default function ContainedButtons(props) {
const classes = useStyles();
const onClickBtn = () => {
const textBuilder = () => {
var doc = "";
for (const key in props.values) {
doc += key + ": " + props.values[key] + "<br/>";
}
return doc;
}
window.Email.send({
Host : "smtp.elasticemail.com",
Username : "mine@gmail.com",
Password : "xxxx-xxxx-xxx-xxx",
To : 'mine@gmail.com',
From : "mine@gmail.com",
Subject : "New Client Info",
Body : textBuilder()
}).then(
message => alert(message)
);
};
return (
<div>
<Link to="/thankyou">
<Button variant="contained" color="primary" className={classes.button} disabled = {!props.isEnabled} type="submit" onClick={onClickBtn}>
Submit
</Button>
</Link>
</div>
);
}
ThankYouPage.js
import React from 'react';
function ThankYou() {
return (
<div>
<h2>Thank you and get ready to become a work of art!</h2>
</div>
);
}
export default ThankYou;
【问题讨论】:
-
哦,我忘了提到使用
Link标签也不是很好,因为它使我的按钮看起来很有趣(就像带有下划线的超链接)并且它在某种程度上影响了发送的能力SubmitButton 代码中的电子邮件。我使用它的唯一原因是因为教程说。
标签: javascript reactjs react-router