Javascript Firestore文档添加在回调中不起作用
我正在进行一个项目,在这个项目中,我必须将一个新文档上载到firestore,这似乎很简单,但是每当我尝试使用Javascript Firestore文档添加在回调中不起作用,javascript,reactjs,firebase,redux,google-cloud-firestore,Javascript,Reactjs,Firebase,Redux,Google Cloud Firestore,我正在进行一个项目,在这个项目中,我必须将一个新文档上载到firestore,这似乎很简单,但是每当我尝试使用.doc.set()或.add()上载任何文档时,请求似乎都不会传递到firebase,并且我的firestore数据库中根本没有显示任何内容。然而,每当我尝试在回调之外上传一些东西时,无论是使用useffect进行页面加载,还是存储在任何类型的匿名函数之外的onClick中,都可以正常运行。我正在使用react-redux-firebase,react-redux,以及redux-fi
.doc.set()
或.add()
上载任何文档时,请求似乎都不会传递到firebase,并且我的firestore数据库中根本没有显示任何内容。然而,每当我尝试在回调之外上传一些东西时,无论是使用useffect
进行页面加载,还是存储在任何类型的匿名函数之外的onClick
中,都可以正常运行。我正在使用react-redux-firebase
,react-redux
,以及redux-firestore
。我还没有弄清楚我做错了什么,所以如果你能指出这一点,那就太棒了
这是保存表单以输入我要上载的信息的组件:
const New = ({ createPost }) => {
const [form, setForm] = useState({
title: '',
content: ''
});
const handleInput = (field, e, data) => {
switch (field) {
case 'title':
setForm({ ...form, title: e.target.value });
break;
case 'content':
setForm({ ...form, content: data });
break;
default:
return null;
}
}
return (
<main className='new'>
<h1>New Post</h1>
<form id='new-post-form' onSubmit={() => createPost(form)}>
<fieldset className='new-post-field'>
<label htmlFor='title'>Title</label>
<input onChange={e => handleInput('title', e)} type='text' name='title' id='new-post-title' placeholder='Title'/>
</fieldset>
<fieldset className='new-post-field'>
<label htmlFor='content'>Post Content</label>
<CKEditor
editor={ ClassicEditor }
onChange={ (e, editor) => {
const data = editor.getData();
handleInput('content', e, data)
}}
/>
</fieldset>
<fieldset className='new-post-field'>
<input className='new-form-button' type='submit'/>
</fieldset>
</form>
</main>
)
}
const mapDispatchToProps = dispatch => ({
createPost: post => dispatch(createPost(post))
});
export default connect(null, mapDispatchToProps)(New)
错误是什么?没有更多信息。看起来您使用了错误的api方法。getFirestore()返回一个redux firestore实例,您使用它就像使用正式的JS客户端一样。再次查看redux firestore文档
export const createPost = post => (
(dispatch, getState, { getFirebase, getFirestore }) => {
const firestore = getFirestore();
const slug = post.title.toString().toLowerCase()
.replace(/\s+/g, '-')
.replace(/[^\w-]+/g, '')
.replace(/--+/g, '-')
.replace(/^-+/, '')
.replace(/-+$/, '')
.substring(0, 75);
firestore.collection('posts').doc(slug).set({
...post,
slug,
timeCreated: firestore.FieldValue.serverTimestamp()
}).then(() => {
dispatch({ type: 'CREATE_POST', post });
}).catch(err => {
dispatch({ type: 'CREATE_POST_ERROR', err })
});
}
);