React와 PHP 최초의 협력
18574 단어 PHPReactTypeScript자바스크립트react-hooks
소개
이번에는 React로 간단한 폼을 만들어 PHP 쪽에서받는 프로그램을 써 보았습니다. Laravel에서는 한 적이 있습니다만, 프레임워크 없는 PHP로 한 적이 없고, 프레임워크 없는 PHP를 많이 잊어 버렸기 때문에 해 보았습니다.
텍스트를 입력하고 제출하면 텍스트가 표시되고 아무것도 입력하지 않으면 오류가 표시되는 느낌의 간단한 양식입니다.
이하를 참고로 했습니다.
참고 : Create a Contact Form With PHP and React in 3 Min
React측
package.json
{
"name": "simple-form",
"version": "1.0.0",
"private": true,
"dependencies": {
"@material-ui/core": "^4.11.2",
"@types/axios": "^0.14.0",
"@types/node": "^14.14.12",
"@types/react": "^17.0.0",
"@types/react-dom": "^17.0.0",
"axios": "^0.21.0",
"react": "^16.11.0",
"react-dom": "^16.11.0",
"react-hook-form": "^6.13.0",
"react-scripts": "^4.0.1",
"styled-components": "^5.2.1",
"ts-node": "^9.1.1",
"typescript": "^4.1.2"
},
"scripts": {
"start": "react-scripts start",
"build": "react-scripts build",
"test": "react-scripts test",
"eject": "react-scripts eject"
},
"eslintConfig": {
"extends": "react-app"
},
"browserslist": [
">0.2%",
"not dead",
"not ie <= 11",
"not op_mini all"
]
}
↑사용한 package입니다. react-hook-form과 material-ui를 사용하고 있지만 이러한 설명은 생략합니다.
↓react-hook-form의 기사도 쓰고 있으므로 좋으면 꼭!
react-hook-form의 사용법을 해설! V6.12.0 추가
index.tsx
import React from "react";
import ReactDOM from "react-dom";
import { App } from "./App";
ReactDOM.render(<App />, document.getElementById("root"));
index.tsx에서 App.tsx에서 가져옵니다. 익숙한 형태라고 생각합니다.
import React, { useState } from "react";
import axios from "axios";
import { Button, CircularProgress, styled, TextField } from "@material-ui/core";
import { useForm } from "react-hook-form";
type FormData = {
text: string;
};
export const App: React.FC = () => {
const [message, setMessage] = useState("");
const [error, setError] = useState(false);
const {
register,
handleSubmit,
formState: { isSubmitting },
} = useForm<FormData>();
const onSubmit = async (data: FormData) => {
try {
const res = await axios.post("http://localhost:8080/index.php", data);
setError(res.data.error);
setMessage(res.data.message);
} catch {
setError(true);
setMessage("通信に失敗しました。");
}
};
return (
<>
<Form onSubmit={handleSubmit(onSubmit)}>
<TextField
defaultValue=""
margin="normal"
variant="outlined"
name="text"
error={error}
inputRef={register}
helperText={message}
/>
<Button
type="submit"
variant="contained"
color="primary"
disabled={isSubmitting}>
{isSubmitting ? <CircularProgress size={24} /> : "送信"}
</Button>
</Form>
</>
);
};
const Form = styled("form")({
display: "flex",
flexDirection: "column",
width: 300,
margin: "0 auto",
});
axios에서
http://localhost:8080/index.php
에 양식 값을 보내고 응답으로 error와 message가 포함 된 연관 배열을받습니다. PHP쪽의 코드를 보면 이미지가 하기 쉽다고 생각합니다.PHP측
PHP는 Docker에서 nginx를 사용하고
http://localhost:8080
에서 시작했습니다. MAMP등을 사용해도 간단하게 할 수 있다고 생각합니다.index.php
<?php
header("Access-Control-Allow-Origin: *");
header('Access-Control-Allow-Headers: Content-Type');
$rest_json = file_get_contents("php://input"); // JSONでPOSTされたデータを取り出す
$_POST = json_decode($rest_json, true); // JSON文字列をデコード
if(empty($_POST['text'])) {
echo json_encode(
[
"error" => true,
"message" => "Error: 入力してください。",
]
);
} else {
echo json_encode(
[
"error" => false,
"message" => 'Success: 入力されたテキスト→'.$_POST['text'],
]
);
}
끝에
여기까지 읽어 주셔서 감사합니다! 세세한 설명이 별로 되어 있지 않습니다만, 처음으로 프런트 엔드와 서버 측에서 제휴할 때의 샘플로서 봐 주시면 좋겠습니다. 다음은 데이터베이스를 사용하여 간단한 CRUD를 할 수 있도록하고 싶습니다. 문장력 별로 없기 때문에 이해하기 어려울지도 모릅니다만, 조금씩 계속하면서 올려 가고 싶습니다.
Reference
이 문제에 관하여(React와 PHP 최초의 협력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/NozomuTsuruta/items/45ca33d7254b6f58fdab텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)