1 回答

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
如果您想根據(jù) 的值為您的狀態(tài)定義一個(gè)默認(rèn)值tipoBusqueda,您可以在 a useEffect、 componentDidMount 甚至在類(lèi)構(gòu)造函數(shù)中進(jìn)行。由于您使用的是類(lèi)組件,因此這應(yīng)該可以解決問(wèn)題:
componentDidMount() {
this.setDefaultValue()
}
setDefaultValue() {
const { tipoBusqueda } = this.props;
if (tipoBusqueda === '1')
this.setState({ filterFacturaNieType: 'N' });
else if (tipoBusqueda === '2')
this.setState({ filterFacturaNieType: 'F' });
}
你不應(yīng)該在你的render方法中這樣做,因?yàn)槟銜?huì)導(dǎo)致一個(gè)無(wú)限循環(huán)。您的 setState 將再次調(diào)用您的渲染方法,然后您將再次調(diào)用 setState。
componentDidMount 只會(huì)在組件掛載后執(zhí)行一次,不再執(zhí)行。從 React 16.8 開(kāi)始,您可以在功能組件中使用鉤子來(lái)獲得狀態(tài),因此我建議您將類(lèi)組件更改為功能組件。你可以這樣做:
import React, { useEffect, useState } from 'react'
const Component = ({ tipoBusqueda, showFiltersHeader }) => {
const [filterFacturaNieType, setFilterFacturaNieType] = useState('')
useEffect(() => {
if (tipoBusqueda === '1')
setFilterFacturaNieType('N');
else if (tipoBusqueda === '2')
setFilterFacturaNieType('F');
}, [])
if (showFiltersHeader) {
return (
<div className="search-container">
<p>Buscar por NIE o Factura</p>
<div className="caja-select">
<select onChange={e => setFilterFacturaNieType(e.target.value)} name="filterFacturaNieType" value={filterFacturaNieType}>
<option value='N'>NIE</option>
<option value='F'>Factura</option>
</select>
</div>
</div>
)
}
return null
}
export default Component
您甚至可以將數(shù)字映射到字母,這樣就可以避免不必要地調(diào)用 setState:
const numberToLetter = {
1: 'N',
2: 'F'
}
然后,在構(gòu)造函數(shù)或 useState 上使用它。
// in a class component
constructor(props) {
super(props)
this.state = {
filterFacturaNieType: numberToLetter[props.tipoBusqueda]
}
}
// or
state = {
filterFacturaNieType: numberToLetter[this.props.tipoBusqueda]
}
// or in a functional component, using the useState:
const [filterFacturaNieType, setFilterFacturaNieType] = useState(numberToLetter[tipoBusqueda])
添加回答
舉報(bào)