浅談React Hook s(一)
10255 ワード
ついこの間[email protected]と発表され、ホクズも正式に幕前に来ました.個人的にはReactにとってHooksは画期的な機能だと思います.Hooksは詳しく紹介しません.Hooksについてはよく分からないなら、まずIntroducng Hook sを見てください.
ホークスは何を持ってきましたか?
簡単にHooksは、Function Componentsでstateや他のReact特性を使用できる能力を持っています.これがもたらす最初の直感的な利点は、元々書いていたFunction Componentsが需要変動のためにstateを追加する必要があります.Class Componentsを再構成する必要がなくなりました.
Hooksがもたらした最大の利点は、私たちの業務コードをよりよく組織し、コード多重化率を高めることです.一例を通して説明します.「コンポーネントはブラウザの幅によって変化し、異なる内容を表示する必要があります.」
まずClass Componentで実現します.
Hooksはどうやって解決しますか?
画像ソース:twitter.com/prchdk/stat…
図から論理関連コードが個々にHookに引き抜かれていることが分かります.これはこの部分に状態がある論理が多重化され、より分かりやすいことを意味します.
ちょっと説明してください.「状態の論理」とは、ここの状態がReactのstateを指します.対応する無状態の論理は普通の関数です.Hooksの前に、このような状態の論理を多重化するには、上記の
試してみます
私が言ったこれらはホークスに興味をそそられましたか?実はReact公式の態度からHooksの傾向が見られます.あるいはFunction Componentsです.Class Componentsは除去されないと言っていますが、プロジェクトの中でまず小さい範囲で試してみてもいいです.きっと好きになりますよ.
締め括りをつける
前に書いたのは分散していますが、最後にHooksが持ってきた開発体験の向上をまとめます. Function Componentsにstateを追加したい場合、再構成コード は不要です.は、 を提供する.コード論理がより統一され、コード構造を容易に組織する .はテストに便利です.
Hooksができたら、Function Componentsはもう「高級文字列モデル」ではないですよね!?
以上は私個人のReact Hookに対する考え方です.もし間違いがあれば、ご指摘ください.
原文リンク:github.com/sliwey/blog…
拡張読み: Introduccing Hook s Making Sense of React Hook s
ホークスは何を持ってきましたか?
簡単にHooksは、Function Componentsでstateや他のReact特性を使用できる能力を持っています.これがもたらす最初の直感的な利点は、元々書いていたFunction Componentsが需要変動のためにstateを追加する必要があります.Class Componentsを再構成する必要がなくなりました.
Hooksがもたらした最大の利点は、私たちの業務コードをよりよく組織し、コード多重化率を高めることです.一例を通して説明します.「コンポーネントはブラウザの幅によって変化し、異なる内容を表示する必要があります.」
まずClass Componentで実現します.
export default class ResizeClassComponent extends React.Component {
constructor(props) {
super(props);
this.resizeHandler = null;
this.state = {
width: window.innerWidth,
}
}
componentDidMount() {
this.resizeHandler = () => {
this.setState({
width: window.innerWidth
})
}
window.addEventListener('resize', this.resizeHandler);
}
componentWillUnmount() {
window.removeEventListener('resize', this.resizeHandler);
}
render() {
const { width } = this.state;
return (
<div>width: {width}div>
)
}
}
今は大丈夫ですが、もう一つのコンポーネントがこの機能を実現する必要があります.同じコードをもう一度書いてください.もし多くの部品があれば、この機能が必要ですか?毎回書いても必ず現実的ではないです.render props
または
を使ってこの問題を解決するという人がいます.// render props
class ResizeRenderProps extends React.Component {
constructor(props) {
super(props);
this.resizeHandler = null;
this.state = {
width: window.innerWidth,
}
}
componentDidMount() {
this.resizeHandler = () => {
this.setState({
width: window.innerWidth
})
}
window.addEventListener('resize', this.resizeHandler);
}
componentWillUnmount() {
window.removeEventListener('resize', this.resizeHandler);
}
render() {
return this.props.children(this.state.width);
}
}
export default class ResizeClassComponent extends React.Component {
render() {
return (
<ResizeRenderProps>
{width => <div>width: {width}div>}
ResizeRenderProps>
)
}
}
//
function withResize(WrappedComponent) {
return class ResizeHoc extends React.Component {
constructor(props) {
super(props);
this.resizeHandler = null;
this.state = {
width: window.innerWidth,
}
}
componentDidMount() {
this.resizeHandler = () => {
this.setState({
width: window.innerWidth
})
}
window.addEventListener('resize', this.resizeHandler);
}
componentWillUnmount() {
window.removeEventListener('resize', this.resizeHandler);
}
render() {
return <WrappedComponent width={this.state.width} />;
}
}
}
export default withResize(class ResizeClassComponent extends React.Component {
render() {
return (
<div>width: {this.props.width}div>
)
}
})
機能は実現されたが、いずれも従来のコンポーネントを再現することは避けられず、さらに階層を増やして、多く使うと「wrapper hell」となり、これをぬきにして、render props
と
自体の複雑さは友好的ではない.Hooksはどうやって解決しますか?
import React, { useState, useEffect } from 'react';
function useWindowWidth() {
const [width, setWidth] = useState(window.innerWidth);
useEffect(() => {
const resizeHandler = () => setWidth(window.innerWidth);
window.addEventListener('resize', resizeHandler);
return () => window.removeEventListener('resize', resizeHandler)
})
return width;
}
export default function ResizeHooks() {
const width = useWindowWidth();
return (
<div>width: {width}div>
)
}
簡単で分かりますか?Hookをカスタマイズしたいだけです.(つまり普通の関数です.いくつかのHookを内蔵しています.)使う時は普通の関数を呼び出すように、複雑な概念はありません.理解が必要です.前に述べたように、Hooksは私達のコードを組織してくれます.相関コードは全部一緒にしてください.Class Componentsのように各ライフサイクル関数に散るのではなく、図を貼ると分かりやすいです.画像ソース:twitter.com/prchdk/stat…
図から論理関連コードが個々にHookに引き抜かれていることが分かります.これはこの部分に状態がある論理が多重化され、より分かりやすいことを意味します.
ちょっと説明してください.「状態の論理」とは、ここの状態がReactのstateを指します.対応する無状態の論理は普通の関数です.Hooksの前に、このような状態の論理を多重化するには、上記の
render props
および
以外に、より簡単で直接的な方法がない.Hooksがあったら、この部分のロジックは単独で引き抜かれて、職責がより明確になり、多重がより簡単になり、コードがより明確になり、テストにも便利です.試してみます
私が言ったこれらはホークスに興味をそそられましたか?実はReact公式の態度からHooksの傾向が見られます.あるいはFunction Componentsです.Class Componentsは除去されないと言っていますが、プロジェクトの中でまず小さい範囲で試してみてもいいです.きっと好きになりますよ.
締め括りをつける
前に書いたのは分散していますが、最後にHooksが持ってきた開発体験の向上をまとめます.
render props
および
に比べて、状態がある論理をより簡単に直観的に多重する方法Hooksができたら、Function Componentsはもう「高級文字列モデル」ではないですよね!?
以上は私個人のReact Hookに対する考え方です.もし間違いがあれば、ご指摘ください.
原文リンク:github.com/sliwey/blog…
拡張読み: