我正在将AppBase.io作为数据库使用,但我不明白为什么该组件在获得项目后会呈现两次?似乎AppBase“数据库” 首先返回 undefined
,然后返回 正确的项目 。有人知道为什么吗?查看示例,我得到2条日志。
在此组件中,我需要从数据库中获取一个项目并进行渲染(没什么特别的)。
感谢您的解释。
var appbaseRef = new Appbase({
url: "https://JHtFTzy4H:d083068b-596c-489d-9244-8db2ed316e79@scalr.api.appbase.io",
app: "winwin"
});
class ItemFull extends React.Component {
constructor() {
super();
this.state = {
item: ''
}
}
componentWillMount() {
appbaseRef.get({
type: "items",
id: 'AWI5K7Q-5Q83Zq9GZnED'
}).on('data', (response) => {
this.setState({
item: response
});
}).on('error', function(error) {
console.log(error)
})
}
render() {
console.log(this.state.item._id, '<-- console_log');
return (<div></div>);
}
}
ReactDOM.render(<ItemFull /> , document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/appbase-js/2.2.11/appbase.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
没有。您在开始异步调用componentWillMount
不托起渲染过程(这是好的),所以render
在调用完成之前调用,因此this.state.item._id
是undefined
因为在这一点上,this.state.item
是''
(你在构造函数中设置的值)。
这完全正常,只需确保在尚无信息的情况下以适当的方式呈现组件即可,例如:
var appbaseRef = new Appbase({
url: "https://JHtFTzy4H:d083068b-596c-489d-9244-8db2ed316e79@scalr.api.appbase.io",
app: "winwin"
});
class ItemFull extends React.Component {
constructor() {
super();
this.state = {
item: ''
}
}
componentWillMount() {
appbaseRef.get({
type: "items",
id: 'AWI5K7Q-5Q83Zq9GZnED'
}).on('data', (response) => {
this.html" target="_blank">setState({
item: response
});
}).on('error', function(error) {
console.log(error)
})
}
render() {
return <div>{this.state.item._id ? this.state.item._id : "loading..."}</div>;
}
}
ReactDOM.render(<ItemFull />, document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/appbase-js/2.2.11/appbase.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
如果在获得该信息之前根本不应该渲染该组件,那么您就在错误的位置提出了请求。:-)您需要在父组件中请求它,并且仅在拥有信息(在中传递信息props
)时才呈现此组件,如下所示:
var appbaseRef = new Appbase({
url: "https://JHtFTzy4H:d083068b-596c-489d-9244-8db2ed316e79@scalr.api.appbase.io",
app: "winwin"
});
class ParentComponent extends React.Component {
constructor(...args) {
super(...args);
this.state = {item: null};
}
componentWillMount() {
appbaseRef.get({
type: "items",
id: 'AWI5K7Q-5Q83Zq9GZnED'
}).on('data', (response) => {
this.setState({
item: response
});
}).on('error', function(error) {
console.log(error)
})
}
render() {
return this.state.item ? <ItemFull item={this.state.item} /> : <div>loading...</div>;
}
}
class ItemFull extends React.Component {
render() {
return <div>{this.props.item._id}</div>;
}
}
ReactDOM.render( <ParentComponent /> , document.getElementById('root'));
<script src="https://cdnjs.cloudflare.com/ajax/libs/appbase-js/2.2.11/appbase.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>
line.FlatMap(WordSutil::GetWords)是方法引用中错误的返回类型: 编码方法:
问题内容: 例如,在以下代码中 返回类型之前的目的是什么(该行的作用或如何读取) 问题答案: 这是使您的 方法 (而不是 类 )通用的语法。 常规类和泛型类的方法可以根据其自身的类型参数进行泛型。在这种情况下,您的方法是on的通用方法,它必须是从扩展的类型。
问题内容: 我将收到来自Obj-C的JSON编码字符串,并且正在解码一个伪字符串(目前),如下面的代码。我的输出结果是在每个项目前加上字符’u’: JSON如何添加此Unicode字符?删除它的最佳方法是什么? 问题答案: u-前缀仅表示您具有Unicode字符串。当您真正使用字符串时,它不会出现在您的数据中。不要被打印输出扔掉。 例如,尝试以下操作: 你不会看到你。
为什么numeric_limits::min返回一个负值为int,但正值为例如浮动和双? 输出: 参考文献: 返回可由数字类型T表示的最小有限值。 对于具有反规范化的浮点类型,min返回最小的正规范化值。请注意,这种行为可能是意外的,特别是与整型类型的min行为相比。要查找没有值小于它的值,请使用。 min仅对有界类型和无界无符号类型有意义,也就是说,表示无穷多个负值的类型没有意义的最小值。
根据JSON规范,表示null值的正确方法是文字。 预期结果: 实际结果:
问题内容: 这是简单的代码,我没有得到设置位图的结果,而是得到了null。谁能告诉我我在哪里犯错了? 更新 好的,所以我无法像我想的那样将文本转换为图像。这样呢 这会创建位图吗? 问题答案: 从文档中: 返回 解码的位图;如果无法解码图像,则 返回 null。 字符串“ test”中涉及的字节不是有效的位图,对吗? 如果将文本“ test”保存在名为or 等的文件中,并试图在Windows中打开它
问题内容: 为什么要用Python返回? 我如何获得改组后的值而不是? 问题答案: 更改列表 到位 。 在原位更改结构的Python API方法通常返回,而不是修改后的数据结构。 如果要基于现有列表创建 新的 随机混排列表,并按顺序保留现有列表,则可以使用输入的完整长度: 您还可以将with用于排序键: 但这会调用排序(O(NlogN)操作),而采样到输入长度仅需要O(N)操作(与所使用的过程相同