Open9
T3 stack練習
ピン留めされたアイテム
環境構築
next.js準備
npx create-next-app@latest . --typescript --tailwind --eslint
src/ directory? > No
App Router? > Yes
import alias? > No
次に各パッケージをインストール
npm i lucide-react @prisma/client next-auth @next-auth/prisma-adapter bcrypt @trpc/client @trpc/react-query @trpc/server react-hot-toast react-icons react-images-uploading cloudinary-build-url cloudinary nodemailer
バージョン変更
手動でpackage.jsonから変更し、npm i
npm i
uiはshadcnを使用
shadcnはradix UIとtailwindcssで構築されたコンポーネントUI
npx shadcn-ui@latest init
#option
Ok to proceed? (y)
✔ Would you like to use TypeScript (recommended)? … no / yes
✔ Which style would you like to use? › New York
✔ Which color would you like to use as base color? › Slate
✔ Where is your global CSS file? … app/globals.css
✔ Would you like to use CSS variables for colors? … no / yes
✔ Are you using a custom tailwind prefix eg. tw-? (Leave blank if not) …
✔ Where is your tailwind.config.js located? … tailwind.config.js
✔ Configure the import alias for components: … @/components
✔ Configure the import alias for utils: … @/lib/utils
✔ Are you using React Server Components? … no / yes
✔ Write configuration to components.json. Proceed? … yes
使用するUIをインストール
npx shadcn-ui@latest add button dropdown-menu form input toast textarea
SEO参考
Cloud Run調べる
試す↓
検索機能について
UIデザインの心得
Don't make me think(「ユーザに考えさせるな」)react基礎
useState,useEffect
ちなみに、React.StrictModeを採用している場合、useEffectは2回発火するらしい(prdは1回)
const [count,setCount] = useState(0)
const handleClick = () => {
// set要素に入れた値をuseStateは保持する。下記だとcount + 1を保持する
setCount(count + 1);
// 読み込み時に発火、第2引数に変数を入れるとその変数が変化したときにも発火する
useEffect(() => {
console.log("hello")
},[count]);
}
useContext
const userInfo = {
name: "tester",
age: 24
};
const UserInfoContext = createContext(userInfo);
// 下層をタグで囲う
ReactDOM.createRoot(document.getElementById("root")).render(
<UserInfoContext.Provider value={userInfo}>
<App />
</UserInfoContext>
);
下層で使用する場合はuseContextをimportするだけ
import {useEffect,useState,useContext} from "react";
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
const [count,setCount] = useState(0)
const userInfo = useContext(UserInfoContext);
const handleClick = () => {
// set要素に入れた値をuseStateは保持する。下記だとcount + 1を保持する
setCount(count + 1);
// 読み込み時に発火、第2引数に変数を入れるとその変数が変化したときにも発火する
useEffect(() => {
console.log("hello")
},[count]);
}
// ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
return(
<p>{userInfo.name}</p>
<p>{userInfo.age}</p>
)
trpcについて
docker + t3-stack