@atomita

Tech Lunch 2019-08-21

tech-lunch

@naotty

気になった記事紹介

BelongsToManyでリレーションしている中間テーブルの created_at を取得したかった

Laravel 5.8 + Lighthouse 4.1
いろいろ試して、asメソッドで別名をつけると取得できた。

class Post extends Model
{
  public function tags(): BelongsToMany
  {
    return $this->belongsToMany('App\Tag')
                  ->as('post_tag')
                  ->withTimestamps();
  }
}
type Post {
  id: ID!
  post_tag: pivotTable
}

type pivotTable {
  created_at
}
query {
  post {
    id
    created_at
    tags {
      data {
        id
        post_tag {
          created_at
        }
      }
    }
  }
}

ただ、もっとシンプルにhasManyから取得できるようにしたので使わないことになったけど、
やり方が分かったってことでいいかな(^^;


@atomita

reactのref

projectで↓のようなcodeを見かけ

export const Foo: FunctionComponent<Props> = (props) => {
  const [isIntersecting, setIsIntersecting] = useState<boolean>(false)

  const ref = createRef<HTMLDivElement>()

  useEffect(() => {
    if (ref.current === null) return
    const observer = new IntersectionObserver((entries) => {
      if (entries.length === 0) return
      const [entry] = entries
      setIsIntersecting(entry.isIntersecting)
    })
    observer.observe(ref.current)
    return () => observer.disconnect()
  }, [])

  return (
    <div>
      <div ref={ref}>
        ...
      </div>
    </div>
  )
}

createRefの中身を知らなかったので、最初、createRefって重くないのかな...
callback refs[1]を使ったほうが良いんじゃ...
とか思ったんですが、reactのcodeを読んでみたら{ current: null }を返すってだけだったので、とりあえず安心しました

でも、副作用扱うものだからhooksでうまいやり方あるように思ったら、やっぱりuseRefがあるー

document.createElement('div', { is: '' })

document.createElementに2つ目の引数があるのをreactのcode読んでて知りました(^^;

Custom Elementsのためのものなんですね

apollo clientの@defer

Introducing @defer in Apollo Server - Apollo GraphQL

便利そ~

Lighthouse-phpも対応[2]しているようなので、laravelなprojectでも!


脚注
  1. React – 3つのref | Solutionware開発ブログ ↩︎

  2. Deferred Fields | Lighthouse ↩︎

その他のタグ

関連する記事