【React x Recoil】DnD state mangemant example ~ WIP ~
とりあえずごちゃごちゃ触るだけの記事
随時開発中
import * as React from "react";
import { useDropzone } from "react-dropzone";
import {
RecoilRoot,
atom,
selector,
useRecoilState,
useRecoilValue,
} from "recoil";
import "./styles.css";
const initialState: File[] = [];
const fileState = atom({
key: "fileState",
default: initialState
});
const b = selector({
key: "b",
get: ({ get }: any) => {
const a = get(fileState);
return a;
}
});
const Child = () => {
const c = useRecoilValue(b);
// if(!isRecoilValue(c)){
// return <div>not RecoilValue</div>
// }
return <div>{c.length !== 0 ? c[0].name : ""}</div>;
};
function MyDropzone() {
const [file, setFile] = useRecoilState(fileState);
const onDrop = React.useCallback(
acceptedFiles => {
setFile((state: typeof initialState) => {
return acceptedFiles;
});
},
[setFile]
);
const getFilesFromEvent = React.useCallback(async event => {
let files = [];
const fileList = event.dataTransfer
? event.dataTransfer.files
: event.target.files;
for (let i = 0; i < fileList.length; i++) {
const file = fileList.item(i);
Object.defineProperty(file, "myProp", {
value: true
});
files.push(file);
}
return files;
}, []);
const { getRootProps, getInputProps, isDragActive } = useDropzone({
onDrop,
multiple: true,
getFilesFromEvent
});
console.log("filea", file?.name || "");
return (
<div {...getRootProps()}>
<input {...getInputProps()} />
{isDragActive ? (
<p>Drop the files here ...</p>
) : (
<p>Drag 'n' drop some files here, or click to select files</p>
)}
<Child />
</div>
);
}
export default function App() {
return (
<RecoilRoot>
<MyDropzone />
</RecoilRoot>
);
}
「武骨日記の」プライバシーポリシーに関して
・プライバシーポリシー
・個人情報取り扱いに関して
・サイトTOP
・私は何者か
・29歳よしもと芸人がWebデザイナー未経験で学校に通い5年後フリーランスのフロントエンドエンジニアになるためにやった9つのこと
・フロント記事
・フロントエンドエンジニア
・フロントエンド記事(タグ)
・TypeScript
・TypeScript練習問題集
・【TypeScript】TypeSript中級者になる為に知っておくと良い108個のこと
・JavaScript練習問題
・styled-componentsの使い方
・SCSS問題集
・GraphQL「Apollo x Relay-Style-Cursor-Pagination(リレースタイルカーソルページネーション)」
・recomposeと仲良くなりたい
・機動戦士FlowType
・初めてReactNativeWebを触ってみて
・Ramda.jsシグネチャの読み方
・環境変数の話
・いちごタルトの作り方
・フロントエンドエンジニア豚汁の作り方
「武骨日記の」プライバシーポリシーに関して
プライバシーポリシー
株式会社TerraceTechについて
最近起業しました。
・株式会社TerraceTech
SNS
・しずかなインターネット kenjimorita
・インド旅 instagram
・適当な日常写真 instagram
・シュールさーん instagram
・シュールさーん LINEスタンプ
・もりたけんじTwitter
・ネタ帳Twitter
・note
※わたしが結成しているWebチームではWeb未経験者、フリーランスの方へのお仕事を紹介しています。
また個人レッスンしてほしい生徒も募集中です。
もしご興味ある方はチャットからご連絡ください。
※業務連絡やお久しぶり連絡もチャットからお願いします。