ブックマーク / zenn.dev/uhyo (8)

  • 王道か邪道か? タイムスタンプによるステート管理

    Reactによるステート管理では、ある状態が変化したら付随して他の状態も変化してほしい場合があります。例えば、次のような場合を考えます。 チェックボックスが1つある。 チェックボックスの初期状態は、HTTP APIから取得したデータによって決まる。 ユーザーはチェックボックスを操作できる。 APIからデータを再取得する場合があり、その場合はチェックボックスの状態が再取得されたデータに従ってリセットされる。 皆さんは、このような要件をどのように実装するでしょうか。 やりがちな実装 まず、やりがちな実装を見てみましょう。 const apiData = useApiData(); const [isChecked, setIsChecked] = useState(false); useEffect(() => { setIsChecked(apiData.isChecked); }, [ap

    王道か邪道か? タイムスタンプによるステート管理
    shingo-sasaki-0529
    shingo-sasaki-0529 2024/08/10
    APIうんぬんじゃなくて、同じデータを複数のソースから得られるとき、どれを採用するかの管理にタイムスタンプを使えば常に機械的に最新のを取り出せるよって話か。
  • export {}; が使われるTypeScript特有の事情

    TypeScriptのコードでは、export {}; という記述を見かけることがあります。これはECMAScriptの構文ではあるものの、これが使われる背景にはTypeScript特有の事情があります。この記事では、export {}; がなぜ使われるのか、どのような効果があるのかを解説します。 export {}; とは この構文は、exportというキーワードから分かるように、モジュールに関連する構文です。 一般に、export { ... };という構文は、既存の変数をモジュールからエクスポートするために使われます。例えば、次のようなコードが考えられます。 const foo = 42; const bar = "hello"; const banana = "banana"; export { foo, bar as hello, banana as "🍌", }; 変数をエク

    export {}; が使われるTypeScript特有の事情
    shingo-sasaki-0529
    shingo-sasaki-0529 2024/08/08
    これ JavaScript (ESM) で定められてる仕様だと思ってた。TypeScript 固有の話なんだ。 確かに Node の場合は.mjs 必要とかもあるし、それぞれ独自に決めてたんだなぁ。
  • React17におけるJSXの新しい変換を理解する

    今日発表された公式ブログの記事によれば、React17では新しいJSXの変換がサポートされます。これはどういうことなのか、我々にどういう影響があるのかをまとめました。 JSXの変換とは ほとんどの人は、Reactを使う際に以下のようなJSX記法を使っているはずです。具体的には次のようなもので、<div>のようなHTMLに近い記法がJSXです。 const Foo = () => { return <div> <p id="a">I am foo</p> <p key="b">I am foo2</p>> </div>; } これらは純粋なJavaScriptではないため、そのままでは実行できません。そのため、何らかの方法でただのJavaScriptに変換する必要があります。現代では、それを担うのはBabelやTypeScriptです。これらによって、上記のJSXを含むコードは次のように変換

    React17におけるJSXの新しい変換を理解する
    shingo-sasaki-0529
    shingo-sasaki-0529 2024/02/28
    はるか昔の話しだけどこれ知らなかった。 import 要らない気がするけどなんかめっちゃ付けてるプロジェクトもあるんだよなぁぐらいの認識だったけどそういうことなのね。
  • 一言で理解するReact Server Components

    この記事はReact公式の内容を翻訳・紹介するものではありません。筆者の解釈や理解を伝えるものであり、Reactの公式見解と一致しているとは限りません。あらかじめご了承ください。 皆さんこんにちは。最近Next.js 13.4がリリースされ、App Routerがstable扱いになりました。App RouterはReact Server Component (RSC) をふんだんに用いて構築されています。 React体でServer Componentがずっとalpha版なのにNext.jsでbetaとかstableとか言ってるのは何で? という問題も、React Canaryのアナウンスにより無事に解消されました。 React Canaryってなに? 先日React公式ブログでアナウンスされた、新しいリリースチャネルです。 筆者の理解による概要をお伝えすると、Canary版のReac

    一言で理解するReact Server Components
    shingo-sasaki-0529
    shingo-sasaki-0529 2023/07/15
    これは世界観が頭に入ってきた面白かった。テンプレートエンジンとして扱われてしまっているコンポーネントを stage 0 としてサーバー側に移すことができるって話は腑に落ちた。
  • 令和5年に知っているべきTypeScriptのnamespaceの知識

    TypeScriptにはnamespaceという構文が存在します。この構文はTypeScript初期からある独自構文の一つですが、現在では特殊な用途以外では使う理由が無いため、よく知らないという方も多いでしょう。 実際、一部のレアケースを除いてnamespaceを使う必要はありませんが、それでも知識としてあったほうが良いことが多少あります。この記事ではこの部分を解説します。 型に.でアクセスできるやつ TypeScriptを使っていると.を使って型にアクセスする機会があるでしょう。例えばReact.FCなどです。 実は、親.型名のように.を使って型にアクセスできるのは、namespaceの機能です。上のコードでのReactは単なる型や単なる変数ではなくnamespaceなのです。 試しに、Foo.BarがstringとなるようにFooを定義してみてください。これができる方法は2つしかありま

    令和5年に知っているべきTypeScriptのnamespaceの知識
    shingo-sasaki-0529
    shingo-sasaki-0529 2023/06/08
    名前空間簡単に作れてドットアクセスの可読性も良いせいでつい魅力的に見えてしまうのよね。もちろん使うこと無いんだけど。 そんで module.type 形式のアクセスが namespace で実現されてるの普通に知らなかった。
  • 緊急解説! 突如出現したnitrogqlの中身と裏側

    皆さんこんにちは。これは、筆者が最近公開したnitrogqlを宣伝する記事です。nitrogqlの概要や、開発にあたっての裏話などを紹介します。 nitrogqlとは nitrogqlは、TypeScriptコードからGraphQLを使用するためのツールです。有体にいえば、graphql-code-generatorを置き換えることを目指して開発しています。具体的には、.graphqlファイルからTypeScriptの型定義を生成する機能を備えています。 例えば、次のようなクエリがあったとします。 query ($unfinishedOnly: Boolean) { todos(filter: { unfinishedOnly: $unfinishedOnly }) { id body createdAt finishedAt tags { id label color } } } imp

    緊急解説! 突如出現したnitrogqlの中身と裏側
    shingo-sasaki-0529
    shingo-sasaki-0529 2023/04/10
    面白そう!graphql-code-generator 使ってると、やっぱそこが型安全にならないよね、補完がイマイチよね、って気持ちがあったけど、でも .graphql だししゃーねぇなぁって妥協してたとこだ。これが TypeScript 5 の力か。
  • structuredCloneはどんなものか

    structuredCloneは、JavaScriptにおいてオブジェクトのディープコピーができる便利な関数です。 従来ディープコピーの標準化された方法が無かったため、structuredCloneの登場はJavaScriptのユーザーにとって画期的なものです。あまりに画期的であり、その便利さも分かりやすいため、出たばかりの時期はTwitterでのJavaScript豆知識ツイートの常連でした。 現在はstructuredCloneのもの珍しさは無くなり、単純に便利なAPIとして受け入れられていますが、そのせいかstructuredCloneに対する理解も単純な人が出てきているようです。 そこで、この記事ではstructuredCloneがどのようなものなのか、どうしてそのようになっているのかについて、じっくりと説明します。 structuredCloneの歴史 筆者は自称世界一技術歴史

    structuredCloneはどんなものか
    shingo-sasaki-0529
    shingo-sasaki-0529 2023/02/19
    出たばかりだと思ったら、もうある程度使えるレベルに実装されてるのね。JSON.parse(JSON.strinfigy(obj)); で止まってた。
  • ReactのSuspense対応非同期処理を手書きするハンズオン

    ReactのConcurrent Renderingで格的に実用化されるSuspenseは、ライブラリを通して使うことになりがちでその裏側が見えにくいものです。このでは、手を動かしながら生のSuspenseの使い方を学びます。

    ReactのSuspense対応非同期処理を手書きするハンズオン
    shingo-sasaki-0529
    shingo-sasaki-0529 2022/10/16
    なるほどー。 Promise を throw しますって説明だけだとピンと来てなかったけど、これは基礎から発展までわかりやすくてよかった。
  • 1