ReactJSでREST APIにPOSTリクエストを送信する3つの方法:ReactJS、ReactJS-Flux、ReactJS-Native
ReactJS で REST API に POST リクエストを送信する方法
このチュートリアルでは、ReactJS コードで REST API に POST リクエストを送信する方法を説明します。3 つの主要なライブラリ、ReactJS 自体、ReactJS-Flux、ReactJS-Native に焦点を当てて説明します。
REST API は、Web サービスを設計するための標準的なアーキテクチャです。クライアントとサーバー間の通信をリソースと呼ばれる抽象的な概念を使用して管理します。各リソースには、一意の URI と HTTP メソッド (GET、POST、PUT、DELETE など) が関連付けられています。
POST リクエストは、サーバーにデータを送信するために使用されます。通常、新しいリソースを作成したり、既存のリソースを更新したりするために使用されます。
ReactJS で REST API に POST リクエストを送信する方法
ReactJS 自体には、HTTP リクエストを実行するための組み込みの Fetch API が提供されています。
import React, { useState } from 'react';
function App() {
const [data, setData] = useState({});
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const data = {
name: formData.get('name'),
email: formData.get('email'),
};
fetch('https://example.com/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((responseData) => {
setData(responseData);
})
.catch((error) => {
console.error(error);
});
};
return (
<form onSubmit={handleSubmit}>
<label>名前:</label>
<input type="text" name="name" />
<br />
<label>メールアドレス:</label>
<input type="email" name="email" />
<br />
<button type="submit">送信</button>
</form>
);
}
export default App;
ReactJS-Flux は、ReactJS と Redux を組み合わせたアーキテクチャです。Redux は、単一の状態ツリーと純粋な関数に基づいた状態管理ライブラリです。
import React from 'react';
import { connect } from 'react-redux';
import { createUser } from './actions';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
name: '',
email: '',
};
}
handleChange = (event) => {
this.setState({ [event.target.name]: event.target.value });
};
handleSubmit = (event) => {
event.preventDefault();
const { name, email } = this.state;
this.props.createUser({ name, email });
};
render() {
const { isFetching, error } = this.props;
return (
<form onSubmit={this.handleSubmit}>
<label>名前:</label>
<input type="text" name="name" value={this.state.name} onChange={this.handleChange} />
<br />
<label>メールアドレス:</label>
<input type="email" name="email" value={this.state.email} onChange={this.handleChange} />
<br />
<button type="submit">送信</button>
{isFetching && <p>送信中...</p>}
{error && <p>エラーが発生しました: {error.message}</p>}
</form>
);
}
}
const mapStateToProps = (state) => ({
isFetching: state.user.isFetching,
error: state.user.error,
});
const mapDispatchToProps = {
createUser: createUser,
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
ReactJS-Native は、ReactJS を使用してモバイルアプリケーションを構築するためのフレームワークです。Fetch API は ReactJS-Native で利用できますが、他のライブラリを使用することもできます。
import React, { useState } from 'react';
import { View, TextInput, Button } from 'react-native';
import
ReactJS で REST API に POST リクエストを送信する方法:サンプルコード
ReactJS 自体
例:ユーザーを作成する
この例では、https://example.com/api/users
エンドポイントに POST リクエストを送信して新しいユーザーを作成する方法を示します。
import React, { useState } from 'react';
function App() {
const [data, setData] = useState({});
const handleSubmit = (event) => {
event.preventDefault();
const formData = new FormData(event.target);
const data = {
name: formData.get('name'),
email: formData.get('email'),
};
fetch('https://example.com/api/users', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(data),
})
.then((response) => response.json())
.then((responseData) => {
setData(responseData);
})
.catch((error) => {
console.error(error);
});
};
return (
<form onSubmit={handleSubmit}>
<label>名前:</label>
<input type="text" name="name" />
<br />
<label>メールアドレス:</label>
<input type="email" name="email" />
<br />
<button type="submit">送信</button>
</form>
);
}
export default App;
ReactJS-Flux
この例では、Redux を使用してユーザーを作成する方法を示します。
import React from 'react';
import { connect } from 'react-redux';
import { createUser } from './actions';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
name: '',
email: '',
};
}
handleChange = (event) => {
this.setState({ [event.target.name]: event.target.value });
};
handleSubmit = (event) => {
event.preventDefault();
const { name, email } = this.state;
this.props.createUser({ name, email });
};
render() {
const { isFetching, error } = this.props;
return (
<form onSubmit={this.handleSubmit}>
<label>名前:</label>
<input type="text" name="name" value={this.state.name} onChange={this.handleChange} />
<br />
<label>メールアドレス:</label>
<input type="email" name="email" value={this.state.email} onChange={this.handleChange} />
<br />
<button type="submit">送信</button>
{isFetching && <p>送信中...</p>}
{error && <p>エラーが発生しました: {error.message}</p>}
</form>
);
}
}
const mapStateToProps = (state) => ({
isFetching: state.user.isFetching,
error: state.user.error,
});
const mapDispatchToProps = {
createUser: createUser,
};
export default connect(mapStateToProps, mapDispatchToProps)(App);
ReactJS-Native
import React, { useState } from 'react';
import { View, TextInput, Button } from 'react-native';
import axios from 'axios';
const App = ()
ReactJS で REST API に POST リクエストを送信する方法:その他の方法
カスタムフックを使用して、POST リクエストのロジックをカプセル化することができます。これにより、コードをより整理し、再利用しやすくなります。
import React, { useState, useEffect } from 'react';
const usePost = (url, data) => {
const [response, setResponse] = useState(null);
const [error, setError] = useState(null);
const [isFetching, setIsFetching] = useState(false);
useEffect(() => {
const fetchData = async () => {
setIsFetching(true);
try {
const response = await axios.post(url, data);
setResponse(response.data);
} catch (error) {
setError(error);
} finally {
setIsFetching(false);
}
};
fetchData();
}, [url, data]);
return { response, error, isFetching };
};
function App() {
const { response, error, isFetching } = usePost('https://example.com/api/users', {
name: 'John Doe',
email: '[email protected]',
});
if (isFetching) {
return <p>送信中...</p>;
}
if (error) {
return <p>エラーが発生しました: {error.message}</p>;
}
if (response) {
return <p>ユーザーが作成されました: {response.id}</p>;
}
return (
<form onSubmit={handleSubmit}>
<label>名前:</label>
<input type="text" name="name" />
<br />
<label>メールアドレス:</label>
<input type="email" name="email" />
<br />
<button type="submit">送信</button>
</form>
);
}
SWR を使用する
SWR は、React のデータフェッチングライブラリです。キャッシュと自動再検証を備えており、API リクエストをより効率的に実行できます。
import React from 'react';
import useSWR from 'swr';
function App() {
const { data, error } = useSWR('https://example.com/api/users', fetcher);
if (error) {
return <p>エラーが発生しました: {error.message}</p>;
}
if (!data) {
return <p>読み込み中...</p>;
}
return (
<ul>
{data.map((user) => (
<li key={user.id}>{user.name} ({user.email})</li>
))}
</ul>
);
}
const fetcher = async (url) => {
const response = await fetch(url);
const data = await response.json();
return data;
};
GraphQL は、API データをクエリおよび操作するためのクエリ言語です。REST API よりも柔軟で強力ですが、学習曲線が少しあります。
import React, { useState, useEffect } from 'react';
import { useQuery, useMutation } from '@apollo/client';
const GET_USERS_QUERY = gql`
query getUsers {
users {
id
name
email
}
}
`;
const CREATE_USER_MUTATION = gql`
mutation createUser($name: String!, $email: String!) {
createUser(name: $name, email: $email) {
id
name
email
}
}
`;
function App() {
const [name, setName] = useState('');
const [email, setEmail] = useState('');
const { data, error, loading } = useQuery(GET_USERS_QUERY);
const [createUser] = useMutation(CREATE_USER_MUTATION);
const handleSubmit = async (event) => {
event.preventDefault();
try {
const { data } = await createUser({ variables: { name, email } });
console.log('ユーザーが作成されました:', data.createUser);
} catch (error) {
console.error(error);
}
};
if
reactjs reactjs-flux reactjs-native