我有两段代码,React中的前端和Laravel中的后端,问题是我调用API来获取SQL连接的数组,但在useEffect React Hook中,它没有获取信息,但如果我创建一个按钮来使其工作,我不知道为什么useEffect Hook不能正常工作
我有一段代码
拉腊维尔:
public function show($id)
{
$returned = response('El lote solicitado no existe', Response::HTTP_BAD_REQUEST);
$lote = DB::table('lotes')
->leftjoin('articulos', 'lotes.idArticulo', '=', 'articulos.id')
->select('lotes.idLote', 'lotes.idArticulo', 'lotes.cantidad', 'lotes.consumoPreferente', 'lotes.observaciones', 'articulos.descripcion')
->where('lotes.id', $id)
->get();
if($lote){
$returned = response($lote, Response::HTTP_OK);
}
return $returned;
}
React:
const [lote, setLote] = useState([])
useEffect(() => {
document.title = `Lote ${id}`
getLote()
}, [])
const { id } = useParams()
const getLote = async () => {
try {
const response = await axios.get(`${endpoint}/lote/${id}`)
setLote(response.data)
} catch (e) {
console.log(`Error ${e}`)
}
}
问题是lote没有在useEffect钩子中设置,但是如果我在它的外部调用getLote函数,它会工作。
另一个问题是,如果我将laravel部分更改为这一部分,则可以在useEffect调用中正常工作:
我认为关键就在这里,如果我使用“findOrFail”,它会正常工作,但如果进行SQL查询,它不会,但如果我使用async - await,它应该等待,对吗?
$lote = Lote::findOrFail($id);
if($lote ){
$returned = response($lote , Response::HTTP_OK);
}
return $returned;
还要提到我使用axios来打电话,这也是问题所在吗?
你知道会发生什么吗?
1条答案
按热度按时间ffx8fchx1#
首先要做的是确保id已经在
useEffect
中定义好了,所以需要像这样重写useEffect
:另外,我建议将函数放在
useCallback
中在deps阵列中添加相关依赖项至关重要。