📅  最后修改于: 2023-12-03 14:52:01.761000             🧑  作者: Mango
在使用 React 进行开发时,通常会用到 useEffect 这个 hook 来实现组件的生命周期函数效果。使用 useEffect 可以对组件进行副作用的处理,比如调用数据加载函数等等。
useEffect 能够让你告诉 React 在组件渲染完成后做什么。我们可以利用这个钩子来实现副作用的效果。这里的副作用指的是:数据加载、订阅事件、手动更改 DOM、发送网络请求等操作。
useEffect 的语法如下:
useEffect(() => {
// 副作用代码
}, [dependencies]);
useEffect 接受两个参数:
useEffect 在组件每次渲染后都会执行。如果想要让 useEffect 仅在第一次渲染时被执行一次,可以把依赖项的数组传递一个空数组,例如:
useEffect(() => {
// do something only on the first render
}, []);
如果你希望那些在 useEffect 函数中被调用的外部变量能够被更新,那么需要将它们新增至依赖项数组中。例如:
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
}, [count]);
在使用 React 进行开发时,通常会根据需要在 useEffect 中调用某些加载函数,以获取数据或者进行更新。
调用加载函数的步骤如下:
function fetchData() {
return fetch('https://api.example.com/data')
.then(response => response.json())
}
useEffect(() => {
fetchData()
.then(response => {
// 处理返回值
})
.catch(error => {
// 处理异常
});
}, []);
const [data, setData] = useState(null);
useEffect(() => {
async function loadData() {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
setData(data);
}
loadData();
}, []);
这里的 loadData 可以是任意的异步方法。如果你希望使用 async/await 语法来处理异步加载操作,那么建议定义一个异步函数 loadData()。
当加载数据时,可能会有一些异常出现。当有异常发生时,我们需要有相应的错误处理逻辑。
为了捕获异常并处理错误,我们可以使用 try/catch 语句。在 try 块中,我们执行获取数据的操作;在 catch 块中,我们捕获这些异常并处理它们。
以下是一个简单的例子:
const [data, setData] = useState([]);
const [error, setError] = useState(null);
useEffect(() => {
async function loadData() {
try {
const response = await fetch('https://api.example.com/data');
const data = await response.json();
setData(data);
} catch (e) {
setError(e);
}
}
loadData();
}, []);
在这个例子中,我们定义了两个 state:data 和 error,用于存储数据和异常信息。如果发生异常,我们将 e 存储在 error 变量中。后面我们可以根据 error 的值来决定如何通知用户这个错误。