javascript 空的redux存储,userlog不返回任何内容

r7s23pms  于 12个月前  发布在  Java
关注(0)|答案(2)|浏览(112)

所以我有一个非常简单的react应用程序。它在第一个渲染器上渲染了一些汽车,当你点击细节时,它会把你带到另一个路由器,并根据它的ID只显示那辆车。
当你按照正确的顺序,打开页面,redux被填充数据,汽车卡呈现出来,然后你点击“细节”按钮,react-router介入并根据我们看到的汽车ID将我们路由到某个特定的汽车ID。
但是.在这一点上,当你尝试点击重新渲染页面,我从我的redux商店什么也没有得到,我需要做什么?我需要在我的每个组件,需要redux商店获取项目,如果没有?
x1c 0d1x的数据


这是我在redux的片段

import { createSlice, createEntityAdapter, createAsyncThunk } from '@reduxjs/toolkit'
import axios from 'axios'

const carAdapter = createEntityAdapter();

// async action
export const fetchCars = createAsyncThunk('cars', async () =>{
  const car = await axios.get('http://localhost:5000/api/cars');
  return car.data.data
});

const carSlice = createSlice({
  name: 'cars',
  initialState: carAdapter.getInitialState({
    status: 'idle',
    error: null
  }),
  reducers:{
  },
  extraReducers :{
    [fetchCars.pending]: (state, action) => {
      state.status = 'loading'
    },
    [fetchCars.fulfilled]: (state, action) => {
      state.status = 'fulfilled'
      carAdapter.setAll(state, action.payload)
    },
    [fetchCars.rejected]: (state, action) => {
      state.status = 'failed'
      state.error = action.error.message
    }
  }
})

export const {
  selectAll: selectAllCars,
  selectById : selectCarById,
} = carAdapter.getSelectors(state => state.cars)

export default carSlice.reducer

字符串
这是我的第一个页面,在这里我从我的API渲染所有的车辆

import React, { useEffect } from 'react'
import { Link } from 'react-router-dom'
import { useDispatch, useSelector } from 'react-redux'
import { fetchCars, selectAllCars } from '../features/car/carSlice'
import './car.css'

export default function Car() {
  const dispatch = useDispatch();
  const carStatus = useSelector(state => state.cars.status)
  const cars = useSelector(selectAllCars)

  useEffect(() => {
    if(carStatus === 'idle') {

      dispatch(fetchCars());
    }
  }, [dispatch, carStatus])

  return (
    <>
      {
        cars.map(car => {
          return (
            <div key={car.id} className="card">
              <img src={car.vehiclePhoto} alt="vehicle" className="vehicle-img" />
              <div className="card-container">
              <h4>{car.vehicleName}</h4>
              <p>{car.price}</p>
              <Link to={car.id}>Details</Link>
              </div>
            </div>
          )
        })
      }
    </>
  )
}


这就是当您尝试重新加载页面时问题开始的地方

export default function Car({ match: { params: { id } } }) {
    const state =  useSelector(state => state)
    const car = selectCarById(state, id);

  return (
    <div className="card">
    { car ? 
      <>
      <img src={car.vehiclePhoto} alt="vehicle" class="vehicle-img" />
      <div className="card-container">
        <h4>{car.vehicleName}</h4>
        <p>{car.price}</p>
      </div>
      </> : 'loading...'
    }
    </div>
    )
}

xxe27gdn

xxe27gdn1#

应用程序的每个页面都需要能够加载自己的数据。在显示单个汽车详细信息的页面上,您希望它查看状态,如果数据已经加载,则选择数据,如果数据尚未加载,则发送数据请求(例如直接转到该页面)。
您可能希望在单个汽车页面上使用与在主页上使用的不同的API端点,因为您希望从id加载单个汽车的详细信息。它可能类似于id #123的'http://localhost:5000/api/cars/123'

uinbv5nw

uinbv5nw2#

看最后一张图,我认为第9行应该是

return selectCarById(state, id)

字符串

相关问题