好吧,我已经知道我们应该做这样的事情,以使状态随着Firebase的变化而更新。
import FirebaseRef from '...'
.
.
.
class MyComponent extends React.Component {
state = {
maxVotes: 0
}
componentDidMount() {
const { boardId } = this.props
FirebaseRef.child(`boards/${boardId}/maxVotes`).on('value', snapshot => {
this.setState({maxVotes: snapshot.val()})
})
}
但是我编码的习惯是在其他文件中委派API调用并将其导入到组件中。我可以做这样的事情吗?
import { setMaxVotes } from ...
.
.
.
componentDidMount() {
const { boardId } = this.props
setMaxVotes(boardId)
}
以及setMaxVotes方法的外观如何?我应该把这样的事情复杂化,还是最好的做法?
最佳答案
通常将API调用委派给不同的模块,但是在不同模块中设置react组件状态不是最佳实践。因此,您可以为API调用创建不同的模块,但应在组件本身中设置状态。该代码可能看起来像这样
componentDidMount() {
const { boardId } = this.props
setMaxVotes(boardId, 'value', snapshot => {
this.setState({maxVotes: snapshot.val()})
})
}
setMaxVotes(boardId, eventType, cb) {
FirebaseRef.child(`boards/${boardId}/maxVotes`).on(eventType, cb);
}