【问题标题】:React component's defaultValue does not workReact 组件的 defaultValue 不起作用
【发布时间】:2021-08-29 16:01:36
【问题描述】:

我正在尝试使用从 DB 中提取的值作为输入字段的默认值(在单击组件之前显示)。

但是,使用“defaultValue”属性,它不会显示获取的值。

App.tsx 文件(取值成功):

  const [Income, setIncome] = useState<string>('0');

    useEffect(() => {

    const incomeResp = async () => {
      await axios.get('http://localhost:4000/app/income')
      .then(
        result => setIncome(result.data && result.data.length > 0 ? result.data[0].income : 0))
    }
    incomeResp();
  }, []);


  return (
      <div className="App">
        <div>
          <IncomeExpensesContainer 
            income={Income}
            setIncome={setIncome} 
            totalExpenses={TotalExpensesAmount} 
            currencySymbol={Currency}
          />
      </div>

组件的文件:

interface Props {
    income: string;
    setIncome: (value: string) => void; 
    totalExpenses: number;
    currencySymbol: string;
}

const IncomeExpensesContainer: React.FC<Props> = ({
        income,
        setIncome, 
        totalExpenses, 
        currencySymbol,
    }: Props) => {


   const [insertedValue, setInsertedValue] = useState<string>(income);

return (
    <Grid container spacing={1} className="income-expenses-container">
        <InputItem 
            onChange={setInsertedValue}
            onBlur={setIncome}
            title="Income" 
            type="number" 
            placeholder="Your income" 
            defaultValue={income}
        />
    </Grid>
);

我在这里错过了什么?

【问题讨论】:

  • 你在App中的return语句是什么?你如何将数据传递给组件文件?缺少很多信息。
  • @Delice 我在 App.tsx 中添加了 return 语句。还需要哪些额外信息?

标签: reactjs input components fetch default-value


【解决方案1】:

在提供额外信息后编辑

在你的组件中使用传递的道具:

const Component = (props) => {
       return (
            <InputItem 
              onChange={setInsertedValue}
              onBlur={setIncome}
              title="Income" 
              type="number" 
              placeholder="Your income" 
              defaultValue={props.income}
        />
}

【讨论】:

  • 是的,这就是我正在做的事情(我刚刚更新了代码以表明这一点)
  • 我认为问题在于 defaultValue 在组件的第一次渲染时被初始化。第一次渲染组件时 - 您的状态可能为空。只有当你的状态有价值时,你才能尝试渲染你的输入组件?例如。 {income &amp;&amp; &lt;IncomeExpensesContainer [...] /&gt; 看看会发生什么?
  • 我已将 defaultValue 替换为 value,但没有帮助。
  • 我还为这个组件添加了条件渲染 { && } 并且它按预期工作 - 一旦状态改变就会渲染,但是,它是初始的value = 0,所以问题没有解决
  • 我终于找到了解决方案: 1) created const [insertedValue, setInsertedValue] = useState(income);并赋值={insertedValue} 2) used useEffect(() => { setInsertedValue(income) }, [income]);
猜你喜欢
  • 2020-08-24
  • 1970-01-01
  • 1970-01-01
  • 2021-07-26
  • 2016-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
  • 2016-11-16
相关资源
最近更新 更多