Я пытаюсь использовать веб-страницу es6 для создания веб-страницы только с формой электронной почты. Форма имеет 3 поля (имя, адрес электронной почты, тема), текстовое поле для ввода сообщения и кнопку для отправки сообщения. Кнопка ссылается на php-скрипт, который отправляет электронное письмо (я могу изменить это, чтобы javascript отправлял электронное письмо с реакцией, но я двигаюсь медленно и уже имел php)
Это обычный html-файл, который будет делать то же самое. Таким образом, ожидаемый результат должен выглядеть как вывод из этого файла.
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8" />
<title>React tutorial</title>
<script src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.2/browser.min.js"></script>
<link rel = "stylesheet" type = "text/css" href = "temp.css">
</head>
<body>
<div class = "form_style form_class" data-state = "desktop left" data-dcf-columns = "4">
<form action = "/php/email_me.php" method = "post" role = "form" aria-label = "contact form" enctype = "multipart/form-data">
<div>
<input id = "field1" aria-invalid = "false" name = "Name" value = "" placeholder = "Name" data-aid = "nameField" type = "text">
<input id = "field2" aria-invalid = "false" name = "Email" value = "" placeholder = "Email" data-aid = "emailField" type = "text">
<input id = "field3" aria-invalid = "false" name = "Subject" value = "" placeholder = "Subject" data-aid = "subjectField" type = "text">
</div>
<textarea name = "Message" placeholder = "Message" data-aid = "messageField" ></textarea>
<button style = "background-color:#014391" type = "submit" name = "submit" value = "Send">Send</button>
</form>
</div>
</body>
</html>
А это соответствующий HTML со встроенным jsx
<!DOCTYPE html>
<html>
<head>
<meta charset = "UTF-8" />
<title>React tutorial</title>
<script src = "https://unpkg.com/react@16/umd/react.development.js"></script>
<script src = "https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script src = "https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.2/browser.min.js"></script>
<link rel = "stylesheet" type = "text/css" href = "temp.css">
</head>
<body>
<div id='emailForm' class = "form_style form_class" data-state = "desktop left" data-dcf-columns = "4"></div>
<script>
var Wrapper = (props) => {
return (
<div className = "form_style form_class" data-state = "desktop left" data-dcf-columns = "4">
<form action = "/php/email_me.php" method = "post" role = "form" aria-label = "contact form" enctype = "multipart/form-data">
<div>
<Field id='field1' name='Name' dataAid='nameField' />
<Field id='field2' name='Email' dataAid='emailField' />
<Field id='field3' name='Subject' dataAid='subjectField' />
</div>
<textarea name = "Message" className = "message" placeholder = "Message" data-aid = "messageField"></textarea>
<button style = "background-color:#014391" type = "submit" name = "submit" value = "Send">Send</button>
</form>
</div>
)
}
var Field = (props) => {
return (
<input id = {props.id} aria-invalid = "false" name = {props.name} value = "" placeholder = {props.name} data-aid = {props.dataAid} type = {props.type}></input>
)
}
Field.defaultProps = { type: 'text'}
ReactDOM.render(
<Wrapper />,
document.getElementById('emailForm')
)
</script>
</body>
</html>
temp.css
.form_class {
top: 20px;
width: 780px;
position: relative;
height: 316px;
margin: auto;
}
.form_style input,.form_style textarea {
font:normal normal normal 16px/1.875em raleway,sans-serif ;
background-color:transparent;
-webkit-appearance:none;
-moz-appearance:none;border:1px solid rgba(11, 50, 89, 1);
color:#0B3259;
margin:0 0 5px;
width:100%;
}
/* Send button */
.form_style button {
background-color:rgba(11, 50, 89, 1);
color:#FFFFFF;
cursor:pointer;
float:right;
}



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


@Goran. Было правильно, что вы должен создаете отдельный файл и транспилируете его, но вы не делаете этого имеют. Основываясь на том факте, что вы добавляете тег <script> для babel, я думаю, вы хотели перенести скрипт на веб-страницу. Просто добавьте type = "text/babel" к тегу скрипта.
В вашем коде были и другие мелкие ошибки, а именно то, что style должен быть передан объект, а не строка, а enctype должен быть encType. Вот весь ваш тег script с этими изменениями:
<script type = "text/babel">
var Wrapper = (props) => {
return (
<div className = "form_style form_class" data-state = "desktop left" data-dcf-columns = "4">
<form action = "/php/email_me.php" method = "post" role = "form" aria-label = "contact form" encType = "multipart/form-data">
<div>
<Field id='field1' name='Name' dataAid='nameField' />
<Field id='field2' name='Email' dataAid='emailField' />
<Field id='field3' name='Subject' dataAid='subjectField' />
</div>
<textarea name = "Message" className = "message" placeholder = "Message" data-aid = "messageField"></textarea>
<button style = {{backgroundColor: "#014391"}} type = "submit" name = "submit" value = "Send">Send</button>
</form>
</div>
)
}
var Field = (props) => {
return (
<input id = {props.id} aria-invalid = "false" name = {props.name} value = "" placeholder = {props.name} data-aid = {props.dataAid} type = {props.type}></input>
)
}
Field.defaultProps = { type: 'text' }
ReactDOM.render(
<Wrapper />,
document.getElementById('emailForm')
)
</script>
Почему стиль должен передаваться как объект? К чему это можно универсализировать. Просто стиль всегда должен передаваться объекту в jsx?
@Jacob Стили всегда должны быть объектом, согласно документация. Я не уверен, почему они так решили — в документации сказано что-то расплывчатое о предотвращении межсайтового скриптинга.
Код JSX должен быть транспилирован с помощью babel, чтобы он работал, когда вы включаете его таким образом в html-файл, что невозможно (я думаю, по крайней мере, это не так). Вы должны извлечь это в отдельный файл и добавить babel и т. д.