Redux 是一个用于 JavaScript 应用程序的状态管理库,它可以帮助你管理应用的状态并使其可预测。当需要从 API 获取纯文本数据时,通常需要结合 Redux 的中间件(如 redux-thunk 或 redux-saga)来处理异步操作。
// actionTypes.js
export const FETCH_TEXT_REQUEST = 'FETCH_TEXT_REQUEST';
export const FETCH_TEXT_SUCCESS = 'FETCH_TEXT_SUCCESS';
export const FETCH_TEXT_FAILURE = 'FETCH_TEXT_FAILURE';
// actions.js
import {
FETCH_TEXT_REQUEST,
FETCH_TEXT_SUCCESS,
FETCH_TEXT_FAILURE
} from './actionTypes';
export const fetchText = (url) => {
return async (dispatch) => {
dispatch({ type: FETCH_TEXT_REQUEST });
try {
const response = await fetch(url);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const text = await response.text(); // 获取纯文本
dispatch({
type: FETCH_TEXT_SUCCESS,
payload: text
});
} catch (error) {
dispatch({
type: FETCH_TEXT_FAILURE,
payload: error.message
});
}
};
};
// reducer.js
import {
FETCH_TEXT_REQUEST,
FETCH_TEXT_SUCCESS,
FETCH_TEXT_FAILURE
} from './actionTypes';
const initialState = {
loading: false,
text: '',
error: ''
};
export const textReducer = (state = initialState, action) => {
switch (action.type) {
case FETCH_TEXT_REQUEST:
return {
...state,
loading: true,
error: ''
};
case FETCH_TEXT_SUCCESS:
return {
...state,
loading: false,
text: action.payload,
error: ''
};
case FETCH_TEXT_FAILURE:
return {
...state,
loading: false,
error: action.payload
};
default:
return state;
}
};
import React, { useEffect } from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { fetchText } from './actions';
const TextComponent = () => {
const { loading, text, error } = useSelector(state => state.text);
const dispatch = useDispatch();
useEffect(() => {
dispatch(fetchText('https://example.com/api/text'));
}, [dispatch]);
if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error}</div>;
return (
<div>
<h1>获取的纯文本内容:</h1>
<pre>{text}</pre>
</div>
);
};
export default TextComponent;
原因:浏览器安全策略阻止了跨域请求
解决方案:
原因:服务器返回的文本编码与客户端解析方式不一致
解决方案:
text/plain; charset=utf-8
).text()
方法会自动处理编码原因:大文本可能导致内存问题或渲染性能问题
解决方案:
原因:重复请求相同资源
解决方案:
AbortController
取消未完成的请求没有搜到相关的文章