【问题标题】:useState not re-rendering [duplicate]useState 不重新渲染[重复]
【发布时间】:2021-03-24 07:03:22
【问题描述】:

我有一个组件在状态变量更改时不会重新渲染,我不明白为什么。这是代码:-

export default function SalesItem(props) {
    const classes = useStyles();
    const api = new API();
    const [salesItem, setSalesItem] = React.useState(null);
    const [site, setSite] = React.useState(null);

    useEffect(() => {
        api.getSite(props.siteCode).then((site) => {
            setSite(site);
            api.getSalesItem(site.SiteID, props.salesItem).then((salesItem) => {
                setSalesItem(salesItem);
            })
        })
    }, [])

    return (
        <form className={classes.root} noValidate autoComplete="off">
            <Input
                defaultValue={salesItem === null ? "test" : salesItem.Description}
                inputProps={{ 'aria-label': 'description' }}
                fullWidth
                />
        </form>
        )
}

site 和 salesItem 的值确实发生了变化,但 Input 字段只显示“test”,这告诉我组件没有重新渲染,我不知道为什么。

【问题讨论】:

    标签: reactjs use-state


    【解决方案1】:

    您应该设置value 而不是defaultValue

    import React, { useState } from "react";
    import "./styles.css";
    
    export default function App() {
      const [value, setValue] = useState("default value");
    
      const updateValue = (e) => {
        const newValue = e.target.value;
    
        if (newValue !== value) {
          setValue(newValue);
        }
      };
    
      return (
        <>
          <button onClick={() => setValue("foo")}>inject value "foo"</button>
          <button onClick={() => setValue("bar")}>Inject value "bar"</button>
          <input value={value} onChange={updateValue} />
          <p>Current value is: "{value}"</p>
        </>
      );
    }
    

    Here is a CodeSandbox to play around with.

    【讨论】:

      猜你喜欢
      • 2020-01-13
      • 1970-01-01
      • 2022-01-04
      • 2021-11-18
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      • 2021-03-10
      • 2022-01-25
      相关资源
      最近更新 更多