【发布时间】:2022-02-17 23:27:35
【问题描述】:
我正在尝试从 firebase 实时数据库中更新数据。
这是一个仓库管理应用程序,用户最初使用一些数据创建一个对象,然后当仓库发生某些事情时可能需要更改数据而不创建新对象。
现在我正在使用 get() 函数从服务器获取数据到特定 ID。
然后我显示数据并允许用户根据需要更改一些字段。
最后我想更新服务器中的数据。
import { getDatabase, ref, get, child, update} from "firebase/database";
const UpdateItem = () => {
const [data, setData]=useState({
numero: 0,
date: '' ,
nome: "",
battistrada:'',
cognome: "",
nomeAzienda: "",
modello: "",
targa: "",
telefono: "",
mail: "",
quantità: '',
misura: "",
marca: "",
cerchi: "",
})
const [searchParams,setSearchParams]=useSearchParams()
const [success, setSuccess] = useState(false);
const dbRef =ref(getDatabase());
const dateFormat = "DD/MM/YYYY";
//get current data
useEffect(() =>get(child(dbRef,'lavorazione/' + searchParams.get('id'))).then((snapshot)=>{
if(snapshot.exists()){
setData(snapshot.val())
console.log('[CONVERTED-DATA]',snapshot.val(), '[stato]', data);
}else{
console.log('[GET] NO data available')
}
}).catch((error)=>{
console.log(error)
})
, [])
//update data
const updateHandler=()=>{
update(ref(dbRef, 'lavorazione/' + searchParams.get('id')), data)
setSuccess(true);
console.log("[PRE-TIMEOUT", success);
setTimeout(() => {
setSuccess(false);
console.log("[TIMEOUT]", success);
}, 5000);
}
//... handlers to update the state
return (
<Form
form={form}
layout="vertical"
onFinish={updateHandler}
autoComplete="off"
>
<Row>
<Col lg={12} xs={24} sm={24} className="form-container">
<h2>CODICE LAVORAZIONE</h2>
<Space direction="vertical" size='large'>
<span style={{fontSize:'32px'}}>{data.numero}</span>
<DatePicker
onChange={onChangeDate}
format={dateFormat}
placeholder={data.date}
name="date"
/>
</Space>
<h2>ANAGRAFICA CLIENTE</h2>
<Form.Item
name="nome"
label="Nome"
rules={[ { type: "string", min: 3 }]}
initialValue={data.nome}
>
<Input
placeholder={data.nome}
value={data.nome}
name="nome"
onChange={onChange}
/>
</Form.Item>
<Form.Item
name="cognome"
label="Cognome"
rules={[ { type: "string", min: 3 }]}
initialValue={data.cognome}
>
<Input
placeholder={data.cognome}
value={data.cognome}
name="cognome"
onChange={onChange}
/>
</Form.Item>
//other inputs down there
根据 firebase 文档,这应该可以正常工作,但实际上我得到 TypeError: db._checkNotDeleted is not a function
我使用 ref 的方式有问题吗?
提前谢谢你
【问题讨论】:
-
错误来自哪一行?
标签: javascript reactjs firebase firebase-realtime-database