每次部署到Firebase托管时,都会创建一个新的部署版本,以便您可以回滚并查看部署的人员.这意味着每次部署的每个文件都存储并占用更多空间.
除了逐个手动删除每个部署版本之外,还有任何自动清理这些无用文件的方法吗?
我正在尝试将组件的ref传递给另一个组件.由于字符串引用已被弃用,我正在使用回调引用.
所以我有类似的东西:
<One ref={c => this.one = c}/>
<Two one={this.one}/>
Run Code Online (Sandbox Code Playgroud)
问题是每当我尝试进入this.props.one内部时Two我都会得到undefined.
我甚至试过这个Two:
componentDidMount(){
setTimeout(()=>{
console.log(this.props.one);
},5000)
}
Run Code Online (Sandbox Code Playgroud)
似乎问题在于,当创建prop时,ref仍然不存在,因为它已经创建了一次One.但我不知道如何"刷新"道具Two以获得已安装组件的引用.
那么将ref传递给另一个组件的正确方法是什么?
编辑
一些用户建议将该逻辑封装在更高的组件中,该组件本身会呈现其他子组件.
这种方法的问题在于您无法创建可重用的逻辑,并且必须在这些封装组件中反复重复相同的逻辑.
假设您要创建一个通用<Form>组件,它将提交逻辑封装到您的商店,错误检查等.您可以这样做:
<Form>
<Input/>
<Input/>
<Input/>
<Input/>
<SubmitButton/>
</Form>
Run Code Online (Sandbox Code Playgroud)
在此示例<Form>中,无法访问子节点的实例(和方法),因为this.props.children不返回这些实例.它返回一些伪组件列表.
那么如何在<Input/>不通过ref的情况下检查某个是否检测到验证错误?
您必须使用验证逻辑将这些组件封装在另一个组件中.例如在<UserForm>.但是,由于各形式是不同的相同的逻辑必须被复制在<CategoryForm>,<GoupForm>等等,这是非常低效的这就是为什么我要封装在验证逻辑<Form>和传递的引用<Input>部件<Form>.
所以我有这个Java代码:
editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_DONE) {
doSomething();
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
我已经设法得到这个(我甚至不确定它是正确的方式):
editText.setOnEditorActionListener() { v, actionId, event ->
if(actionId == EditorInfo.IME_ACTION_DONE){
doSomething()
} else {
}
}
Run Code Online (Sandbox Code Playgroud)
但是我收到了一个错误 Error:(26, 8) Type mismatch: inferred type is kotlin.Unit but kotlin.Boolean was expected
那么这样的事件处理程序是如何用Kotlin编写的?
考虑这个数据结构:
{
"users":{
"user-1":{
"groups":{
"group-key-1":true,
"group-key-3":true
}
}
},
"groups":{
"group-key-1":{
"name":"My group 1"
},
"group-key-2":{
"name":"My group 2"
},
"group-key-3":{
"name":"My group 3"
},
"group-key-4":{
"name":"My group 4"
},
}
}
Run Code Online (Sandbox Code Playgroud)
我可以通过以下方式获取特定用户的组:
firebase.database().ref('users/user-1/groups').on(...)
Run Code Online (Sandbox Code Playgroud)
哪个会给我这个对象:
{
"group-key-1":true,
"group-key-3":true
}
Run Code Online (Sandbox Code Playgroud)
所以现在我想检索这些组的信息.
我最初的直觉是循环这些键并执行此操作:
var data = snapshot.val()
var keys = Object.keys(data)
for (var i = 0; i < keys.length; i++) {
firebase.database().ref('groups/' + keys[i]).on(...)
}
Run Code Online (Sandbox Code Playgroud)
这是在Firebase中调用同一端点上的多个密钥的适当方法吗?
Firebase是否提供了解决此问题的更好方法?
我在某处读到了Firebase缓存数据的说法.
所以我运行了这个测试,读取了大量的数据(大约400KB).
这是相关的代码.
firebase.initializeApp(config);
var counter = 0;
console.time('firebase answered in');
firebase.database().ref('texts').once('value',onData);
function onData(snapshot){
console.timeEnd('firebase answered in');
counter ++;
if(counter > 20) return;
setTimeout(function(){
console.time('firebase answered in');
firebase.database().ref('texts').once('value',onData);
},2000);
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,第一次加载数据需要一段时间,后续调用花费的时间要少得多.
firebase的回答:1279.422ms
firebase的回答:236.378ms
firebase的回答:228.595ms
firebase回答:202.700ms
firebase的回答:208.371ms
firebase回答:214.807ms
等等
但是,如果数据在本地缓存~200ms(有时更多)似乎需要大量时间来访问本地数据.足以让用户在渲染UI时感知延迟.
Firebase缓存数据也是如此吗?那些发生了~200ms什么?
在 Svelte 中,我们可以添加过渡:
<div in:fade={{duration: 150}}>...</div>
Run Code Online (Sandbox Code Playgroud)
还可以使用条件 HTML 属性:
<input disabled={null}>
Run Code Online (Sandbox Code Playgroud)
这不适用于转换:
<div in:fade={null}>...</div>
Run Code Online (Sandbox Code Playgroud)
它会抛出此错误,因为它需要一个配置对象:
无法读取 null 属性“延迟”
那么在 Svelte 中添加条件转换的适当方法是什么?
以外:
{#if animate}
<div in:fade></div>
{:else}
<div></div>
{/if}
Run Code Online (Sandbox Code Playgroud) 使用数据库时,您可以snapshot.exists()检查是否存在某些数据.根据文档,没有类似的存储方法.
https://firebase.google.com/docs/reference/js/firebase.storage.Reference
检查Firebase存储中是否存在某个文件的正确方法是什么?
我正在尝试使用可调用的云函数在 Firebase 上创建一个新用户。每当出现错误(例如:电子邮件无效)时,无论我做什么,该函数总是向我的 Firebase 应用返回相同的神秘错误:
{"error":{"status":"INTERNAL","message":"INTERNAL"}}
Run Code Online (Sandbox Code Playgroud)
在 Firebase 控制台中,我也得到了这个:
Unhandled error Error: Unknown error status: auth/invalid-email
Run Code Online (Sandbox Code Playgroud)
这没有多大意义,因为我实际上是在处理错误。这是云函数的代码:
exports.createUser = (data, context) => {
return admin.auth().createUser({
email: data.email,
password: data.password
}).catch((error) => {
throw new functions.https.HttpsError(error.errorInfo.code, error.errorInfo.message);
});
}
Run Code Online (Sandbox Code Playgroud)
如图所示我试着使用throw functions.https.HttpsError这是什么文档建议。
我也尝试过return functions.https.HttpsError甚至抛出我自己的错误,结果相同。
我使用了 try/catch withawait而不是使用then()and catch()。结果一样。功能控制台仍然告诉我错误没有被处理,这是荒谬的。
那么在使用可调用的云函数时如何向我的用户抛出正确的错误呢?
在许多语言中,您可以在不创建数据类型的情况下创建对象,并向该对象添加属性.
例如在JS或AS中:
var myObject = {};
myObject.myParameter = "hello world";
Run Code Online (Sandbox Code Playgroud)
或者您可以使用C和C++创建结构.
是否有可能在C#中做到这一点?
因此,新的Firebase支持使用Google Cloud Platform进行存储.
您可以images使用以下命令将文件上传到文件夹:
var uploadTask = storageRef.child('images').put(file, metadata);
Run Code Online (Sandbox Code Playgroud)
如果要images/user1234使用代码动态创建子文件夹,该怎么办?
官方样本没有显示如何执行此操作,也没有显示官方指南或参考文档.
Firebase控制台是唯一可以手动创建文件夹的位置吗?