render()
メソッドは、Reactクラスコンポーネントの重要な部分です。これは、すべてのクラスコンポーネントが実装する必要がある必要な方法です。 render()
メソッドの主な機能は、現在の状態と小道具に基づいて、コンポーネントが表示すべきものを説明することです。コンポーネントの状態または小道具の変更の場合、Reactはrender()
メソッドを呼び出して、UIを更新する必要があるかどうかを判断します。
以下は、 render()
メソッドを備えたクラスコンポーネントの基本的な例です。
<code class="javascript">import React, { Component } from 'react'; class ExampleComponent extends Component { render() { return <div>Hello, {this.props.name}!</div>; } } export default ExampleComponent;</code>
この例では、 render()
メソッドは、DOMの構築と更新に使用する反応が使用されるJSXを返します。 render()
メソッドは、コンポーネントの状態またはプロップが変更されるたびに呼び出され、コンポーネントが新しいデータを再レンダリングできるようにします。
Reactのrender()
メソッドは、次のタイプのいずれかを返す必要があります。
React Elements :これらは、JSXを介して、またはReact.createElement()
を呼び出すことで作成できます。例えば:
<code class="javascript">return <div>Hello, World!</div>;</code>
配列とフラグメント:複数の要素を返すことができます。例えば:
<code class="javascript">return [ <li key="A">First item</li>, <li key="B">Second item</li>, <li key="C">Third item</li> ];</code>
またはフラグメントの使用:
<code class="javascript">return ( <react.fragment> <li>First item</li> <li>Second item</li> <li>Third item</li> </react.fragment> );</code>
ポータル:これにより、子供を別のDOMサブツリーにレンダリングできます。例えば:
<code class="javascript">return ReactDOM.createPortal( <div>This is rendered in a different part of the DOM</div>, document.getElementById('modal-root') );</code>
文字列と数字:これらはテキストノードとしてレンダリングされます。例えば:
<code class="javascript">return 'Hello, World!';</code>
ブーチャンまたはヌル:これらはレンダリングされません。例えば:
<code class="javascript">return null;</code>
render()
メソッドは純粋である必要があることに注意することが重要です。つまり、コンポーネント状態を変更しないでください。また、ブラウザと直接相互作用する必要もありません。副作用は、ライフサイクルの方法またはフックを通じて管理する必要があります。
Reactの関数コンポーネントは、クラスコンポーネントが行うようにrender()
メソッドを使用しません。代わりに、関数コンポーネント自体はクラスコンポーネントのrender()
メソッドに相当します。それらは、 props
引数として受け入れ、表示するべきものを説明する反応要素を返す純粋な機能です。
関数コンポーネントの例は次のとおりです。
<code class="javascript">import React from 'react'; function ExampleComponent(props) { return <div>Hello, {props.name}!</div>; } export default ExampleComponent;</code>
主な違いは次のとおりです。
this.state
を使用してローカル状態を管理できます。機能コンポーネントは、フックを導入する前に、ローカル状態を管理したり、ライフサイクル方法を使用したりすることができませんでした。フック(React 16.8で導入)を使用すると、機能コンポーネントはuseState
およびuseEffect
フックを介して状態とライフサイクルを管理できます。これは、関数コンポーネントのフックを使用した例です。
<code class="javascript">import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; }); return ( <div> <p>You clicked {count} times</p> <button onclick="{()"> setCount(count 1)}>Click me</button> </div> ); } export default ExampleComponent;</code>
いいえ、ライフサイクルメソッドはrender()
メソッド内で使用しないでください。 render()
メソッドは純粋で、副作用がない必要があります。 componentDidMount
、 componentDidUpdate
、 componentWillUnmount
などのライフサイクル方法は、副作用を処理するように設計されており、 render()
メソッドの外で使用する必要があります。
たとえば、コンポーネントがマウントされたときにデータを取得する場合は、クラスコンポーネントでcomponentDidMount
を使用します。
<code class="javascript">import React, { Component } from 'react'; class ExampleComponent extends Component { constructor(props) { super(props); this.state = { data: null }; } componentDidMount() { // Fetch data here fetch('/api/data') .then(response => response.json()) .then(data => this.setState({ data })); } render() { return ( <div> {this.state.data ? ( <div>Data: {this.state.data}</div> ) : ( <div>Loading...</div> )} </div> ); } } export default ExampleComponent;</code>
関数コンポーネントでは、 useEffect
フックを使用して同じ結果を達成します。
<code class="javascript">import React, { useState, useEffect } from 'react'; function ExampleComponent() { const [data, setData] = useState(null); useEffect(() => { // Fetch data here fetch('/api/data') .then(response => response.json()) .then(data => setData(data)); }, []); // Empty dependency array means this effect runs once on mount return ( <div> {data ? <div>Data: {data}</div> : <div>Loading...</div>} </div> ); } export default ExampleComponent;</code>
どちらの場合も、実際のデータを取得するロジックを取得することは、純度を維持し、不必要な再レンダーを防ぐためにrender()
メソッドの外側に保持されます。
以上がReactクラスコンポーネントのRender()メソッドは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。