refを使い、コンポーネントが生成されたと同時に、同じコンポーネント内にある要素の高さを取得して別の要素のCSSを更新しようとしています。
TypeScript, Style Component(4.1.5)を併用しています。
refオブジェクトをあらかじめ以下のように作っておき、 componentDidMount()
内で呼び出そうと思ったのですが、呼び出す際に current
の中がnullになってしまうようで、DOMの操作ができません。
typescript
1import React, {RefObject} from 'react'; 2import { styled } from '@this/constants/themes'; 3 4class SampleComponent extends React.Component<Props> { 5 6 private rightNaviRef = React.createRef<HTMLDivElement>(); 7 8 componentDidMount() { 9 node = this.rightNaviRef.current!.firstElementChild!.clientHeight + 40; 10 ... 11 } 12 13 render() { 14 <RightNavi ref={this.rightNaviRef}> 15 ... 16 </RightNavi> 17 } 18} 19 20const RightNavi = styled.div` 21 width: ${rightNaviWidth}; 22 margin-left: 20px; 23 padding: 10px 20px; 24 ... 25`; 26
Uncaught TypeError: Cannot read property 'firstElementChild' of null
試したこと
refを使わず、RightNaviにIDを付与したうえでdocument.getElementById()
で呼んでみたのですが、やはり返ってくる値がnullでした。このため、ReactライフサイクルにおいてDOMがレンダリングできていない段階で呼び出しを行っていることが原因ではないかと思っています。
そこで、 componentDidMount()
を componentDidUpdate()
に変えてみたのですが、同じエラーとなってしまいました。
refをコンポーネントが生成されたと同時に呼び出したい場合、どのような処理を使えばよいでしょうか?
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/06 03:24 編集