简体   繁体   English

AntD Rate DefaultValue 没有得到值

[英]AntD Rate DefaultValue Doesn't Get the Value

The defaultValue function of AntD Rate doesn't work. defaultValue Rate 的默认值 function 不起作用。 Or I do something wrong.或者我做错了什么。

Here is my main page:这是我的主页:

const BookPage = () => {
    ...
    const [state, setState] = useState({});

    useEffect(() => {
        fetch()
    }, [])

    async function fetch() {
        ...
        const rate = await UserBookService.fetchRate(bookId);

        await setState({..., rate: rate});
    }

My return function:我的回报 function:

    console.log(state.rate)
    return (
        <>
            <div style={{width: "fit-content", display: "inline-block", marginLeft: "200px"}}>
            ...

                <div style={{display: "inline-block", float: "right", marginLeft: "50px", marginTop: "70px"}}>
                    ...
                    <hr/>
                    <Rate defaultValue={state.rate} onChange={(value) => onChange(value)}></Rate>
                </div>
            </div>
        </>
    )

The result of console.log(state.rate) : console.log(state.rate)的结果:

undefined
undefined
5
5

So, it's probably because of the undefined lines but I don't know how to solve it.所以,这可能是因为未定义的行,但我不知道如何解决它。

There are 2 problems:有2个问题:

1, You have duplicate values when printing. 1、打印时有重复值。 The fix is to remove or comment the解决方法是删除或评论

<React.StrictMode></React.StrictMode> <React.StrictMode></React.StrictMode>

tag in the index.js file index.js 文件中的标记

2, useEffect only executes when the component has been rendered, undefined when the component is rendering, so it defaults to an empty object {}.rate = undefined 2、useEffect只在组件已经渲染时执行,在组件渲染时undefined,所以默认为空 object {}.rate = undefined

Please check its value before using使用前请检查其值

Here is the solution I found, I had to change the RateSection from function component to class component.这是我找到的解决方案,我必须将 RateSection 从 function 组件更改为 class 组件。 So that, I could use an if-else statement on the render method.因此,我可以在 render 方法上使用 if-else 语句。

import {Rate} from "antd";
import UserBookService from "../../service/user/UserBookService";
import React from "react";

class RateSection extends React.Component {
    state = {
        rate: undefined
    }

    constructor(props) {
        super(props);
        this.getCurrentRate().then(value => this.setState({rate: value}));
    }

    getCurrentRate = async () => {
        return await UserBookService.fetchRate(this.props.bookid);
    }

    onChange = async (value) => {
        await UserBookService.addRate(this.props.bookid, value);
    }

    render() {
        if (this.state.rate !== undefined) {
            return (
                <Rate defaultValue={this.state.rate} onChange={(value) => this.onChange(value)}></Rate>
            )
        }
    }
}

export default RateSection;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM