Is there a way I can wait for redux to obtain a state before my component is rendered? I have a function that helps me obtain a single product from my backend, this way when users want to update product details, the values are already pre-populated in the form. However when the app gets loaded the first and I do an useSelector to get the single product I firstly get "undefined" and then I get the product from the redux state. This causes the form values to be initially undefined, hence an error. enter image description here

我希望总是有来自状态的值,而不需要未定义.在我的组件上,我有一个"useEffect"来调度一个函数以获取产品,它从url参数获取slug以将其发送到操作:

useEffect(() => {
    dispatch(getSingleProduct(slug));
}, [dispatch, slug]);

这是获取项目的操作函数:

export const getSingleProduct = (slug) =>{
    
    return async (dispatch) =>{
        try {
            const {data} = await axios.get(`${process.env.REACT_APP_API}/product/${slug}`);
            dispatch(singleProd(data));
        } catch (error) {
            console.log(error)
        }        
    }
}

const singleProd = data =>({
    type: '[PROD] GET SINGLE PRODUCT',
    payload: data
})

我能做些什么来保证产品始终可用吗?没有先定义?

推荐答案

使用具有布尔值的加载状态.

最初它是真的,当您成功地从API响应中获得产品时,将其设为假.在组件中使用此加载状态进行条件渲染.

如果我这样重写你的代码:

return async (dispatch) =>{
    try {
        setLoading(true)
        const {data} = await axios.get(`${process.env.REACT_APP_API}/product/${slug}`);
        dispatch(singleProd(data));
        setLoading(false)
    } catch (error) {
        console.log(error)
    }        
}

然后在组件内部将加载状态作为条件渲染放置,如下所示:

{loading ? (
    <p>Loading...</p>
) : (
    <YOUR COMPONENT AFTER PRODUCT RESPONSE />
)}

在API调用完成之前,您将获得加载状态,只有在成功调用API之后,您才会显示产品详细信息.

Reactjs相关问答推荐

UseEffect和useSelector的奇怪问题导致无限循环

无法在主组件的返回语句中呈现预期组件

根据处于react 状态的数组的名称键,将新对象添加到嵌套的对象数组中

关于forwardRef,我可以';我不理解第二个用例

Gitlab CI和VITE环境变量出现问题

如何在中间件中获取 nextAuth 会话

useEffect firebase 清理功能如何工作?

无法在下一个标头上使用 React hooks

如何清除过滤器搜索的状态

这个简单的React组件为什么会多次渲染?

在遵循 react-navigation 的官方文档时收到警告消息

如何渲染子路径并触发react 路由父加载器?

React 组件列表中的第一个计时器正在获取值 NaN

图像路径很奇怪,部署 Next.js 应用程序后我看不到任何图像

在react 中从外部 api 渲染列表

如何通过单击多个选项中的特定项目在模态上呈现不同的标题?

react-markdown 不渲染 Markdown

getAttribute 函数并不总是检索属性值

错误未捕获的错误:[App] 不是 组件. 的所有子组件必须是

a.active 类在导入 x.scss 文件时有效,但在使用 x.module.scss 时无效