タグ

ブックマーク / zenn.dev/pandanoir (3)

  • useEffectはなぜ使う必要があるのか? document.title = 'title' をラップする理由

    答え(結論): レンダリングとエフェクトを分離するため クリーンアップを設定するため useEffect でラップする意味ってなくない? 以下の2つのコードはどちらもレンダリングすると Hello world と表示され、ページタイトルが Hello world になります。 const App1 = () => { useEffect(() => { document.title = 'Hello world'; }); return <h1>Hello world</h1> }; 同じ動作をするのであれば、なぜ useEffect でラップする必要があるのでしょうか? 理由1: レンダリング時に react の内部動作を考慮しなくて済む useEffect を使っていない App2 は、react が DOM 更新している最中に document.title = 'Hello worl

    useEffectはなぜ使う必要があるのか? document.title = 'title' をラップする理由
  • 文字数のカウントはどれが正解なのか?

    A. ユースケース次第でどう実装すべきかは変わる。Intl.Segmenter が万能というわけでもない。 (クソ最悪な小バズをかましてしまったので、贖罪も兼ねて記事を書きました) 「文字数を数える」のは難しい 「文字数を数える」実装は意外と難しいです。というのも、アルファベットや数字だけなら str.length でも正しく数えられますが、絵文字や異体字などが入った文字列は見た目どおりに数えられません。

    文字数のカウントはどれが正解なのか?
  • <div/> のレンダリングから始める React 学び直し

    React Advent Calendar 2022 2日目の記事です。 記事はごく簡単なコンポーネントから始めて、react のレンダリングについて学び直す記事です。学び直し(!=入門記事)なので JSX、TS の説明などはしません。 記事の対象読者 ある程度 react を触っていて、もっとレンダリングについて理解したい人 より良いコンポーネントを書きたい人 記事のコードについて 特に断らないかぎり、記事に出てくるコードは以下のコードを省略したものです。実際に動かせる codesandbox も用意したので、そちらも参照ください。 import { createRoot } from 'react-dom/client'; const App = /* 実装 */; createRoot(document.querySelector('#main')).render(<App

    <div/> のレンダリングから始める React 学び直し
  • 1