# Reactプロジェクト作成 [参考](https://qiita.com/Takashi_Code_20/items/0dd566eba64da45ccd62#:~:text=EC2%E3%81%AF%E3%82%AF%E3%83%A9%E3%82%A6%E3%83%89%E5%86%85%E3%81%A7%E6%8F%90%E4%BE%9B%E3%81%95%E3%82%8C%E3%82%8B%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF%E3%83%BC%20%28%E3%83%AA%E3%82%BD%E3%83%BC%E3%82%B9%29%E3%81%A7%E3%81%99%E3%80%82%20%E5%BE%8C%E3%81%AB%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8BReact%E3%82%A2%E3%83%97%E3%83%AA%E3%81%AF%E3%81%93%E3%81%AEEC2%E3%81%AB%E3%82%AF%E3%83%AD%E3%83%BC%E3%83%B3%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E6%A4%9C%E7%B4%A2%E7%AA%93%E3%81%A7EC2%E3%82%92%E6%A4%9C%E7%B4%A2%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%BE%E3%81%99%E3%80%82,%E3%83%9E%E3%82%B7%E3%83%B3%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AFAmazon%20Linux%202%20AMI%E3%82%92%E9%81%B8%E6%8A%9E%E3%80%82%20%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%BF%E3%82%A4%E3%83%97%E3%81%AFt2.micro%E3%82%92%E9%81%B8%E6%8A%9E%E3%80%82) # React + Typescript な環境を構築する ### Reactのプロジェクトを作成 ```bash npx create-react-app {プロジェクト名} --template typescript ``` (例) ```bash npx create-react-app react-sample --template typescript ``` ### Tailwind css 追加 ```bash cd react-sample npm install -D tailwindcss postcss autoprefixer npx tailwindcss init -p ``` - tailwind.config.js ```json /** @type {import('tailwindcss').Config} */ module.exports = { content: [ "./src/**/*.{js,jsx,ts,tsx}", ], theme: { extend: {}, }, plugins: [], } ``` - ./src/index.css ```css @tailwind base; @tailwind components; @tailwind utilities; ``` ## React Routerの設定 [参考](https://qiita.com/suisui654/items/1b89446e03991c7c2c3d) [参考](https://qiita.com/MasakiFukunishi/items/861e21877d5333768847) ```bash npm install -g yarn yarn init yarn add react-router-dom ``` Form.tsx ```js import React from 'react'; import logo from './logo.svg'; import './App.css'; function Form() { return ( <div className="App"> <header className="App-header"> <h1> Form </h1> </header> </div> ); } export default Form; ``` index.tsx ```jsx import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; import Form from './Form'; // 追加 import reportWebVitals from './reportWebVitals'; import { Routes, Route, BrowserRouter } from "react-router-dom"; // 追加 const root = ReactDOM.createRoot( document.getElementById('root') as HTMLElement ); root.render( <React.StrictMode> <BrowserRouter> <Routes> <Route path="/" element={<App/>} /> <Route path="/form" element={<Form/>} /> </Routes> </BrowserRouter> </React.StrictMode>, ); // If you want to start measuring performance in your app, pass a function // to log results (for example: reportWebVitals(console.log)) // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals reportWebVitals(); ``` App.tsx ```js import React from 'react'; import logo from './logo.svg'; import './App.css'; import { Link } from "react-router-dom" // 追加 function App() { return ( <div className="App"> <header className="App-header"> <img src={logo} className="App-logo" alt="logo" /> <Link className='' to="/form">Formへ</Link> </header> </div> ); } export default App; ``` サーバ起動 ``` yarn s ``` ## reactでSSRしてみた(XAMMP) package.json("name"と同一のインデントに以下を追記) ``` "homepage": "http://localhost/react/", ``` publicフォルダに「.htaccess」を追加 ``` Options -MultiViews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.html [QSA,L] ``` 以下のコマンドで生成されるbuildファイルの中身を C:\xampp\htdocs\react に入れる ``` npm run build ``` `http://localhost/react/`にアクセス