当我运行此命令时:
react-native run-ios
Run Code Online (Sandbox Code Playgroud)
我的应用程序默认在iPhone6模拟器设备中运行:
Found Xcode project RN.xcodeproj
Launching iPhone 6 (9.2)...
Run Code Online (Sandbox Code Playgroud)
如何在默认情况下让应用程序在不同的模拟器设备(如iPhone5s)中运行?
因此警报给出了宽度和高度的未定义值.我认为来自img.onload计算的图像的w和h值没有被传递给要返回的值,或者它可能在onload计算它们之前返回w和h :
function getMeta(url){
var w; var h;
var img=new Image;
img.src=url;
img.onload=function(){w=this.width; h=this.height;};
return {w:w,h:h}
}
// "http://snook.ca/files/mootools_83_snookca.png" //1024x678
// "http://shijitht.files.wordpress.com/2010/08/github.png" //128x128
var end = getMeta("http://shijitht.files.wordpress.com/2010/08/github.png");
var w = end.w;
var h = end.h;
alert(w+'width'+h+'height');
Run Code Online (Sandbox Code Playgroud)
如何让警报显示正确的宽度和高度?
注意:我在这个问题上有4个赏金,但下面没有提出的答案是这个问题所需要的答案.所需的一切都在下面的Update 3中,只是寻找要实现的Laravel代码.
更新3:此流程图正是我想要完成的流程,下面的所有内容都是原始问题以及一些较旧的更新.该流程图总结了所需的一切.
下面的流程图中的绿色部分是我知道如何做的部分.红色部分及其旁注是我正在寻找帮助完成使用Laravel代码.
我已经做了很多研究,但是当使用Laravel和JWT httponly cookie进行自我消费的API时,信息总是很短而且不完整(大多数在线教程只显示JWT存储在本地存储中,这不是很安全).看起来像包含JWT by Passport的httponly cookie应该用于识别Javascript端的用户,当每次请求发送到服务器以验证用户是否是他们所说的用户时.
还有一些额外的东西需要全面了解如何使这个设置工作,我没有在一个教程中遇到这个包括:
我希望这个问题的答案可以作为一个易于遵循的指南,为未来的读者和那些正在努力寻找一个自我消费API的上述观点的答案.
更新1:
CreateFreshApiToken之前的功能,但是在撤销用户令牌时这不起作用(上面的第3点和第4点).这是基于此评论的核心laravel开发商,谈论时CreateFreshApiToken中间件:由此中间件创建的JWT令牌不会存储在任何位置.它们不能被撤销或"不存在".它们只是为您的api调用提供了一种通过laravel_token cookie进行authed调用的方法.它与访问令牌无关.另外:您通常不会在发布它们的同一个应用程序上使用客户发出的令牌.您可以在第一方或第三方应用中使用它们.使用中间件或客户端发出的令牌,但不能同时使用两者.
所以似乎能够迎合第3点和第4点来撤销令牌,如果使用CreateFreshApiToken中间件则不可能这样做.
Authorization: Bearer <token>处理安全的httpOnly cookie 似乎不是一种方法.我认为请求/响应应该包含安全的httpOnly cookie作为请求/响应头,像这样基于laravel文档:使用此身份验证方法时,默认的Laravel JavaScript脚手架指示Axios始终发送X-CSRF-TOKEN和X-Requested-With标头.
headerswindow.axios.defaults.headers.common = {
'X-Requested-With': 'XMLHttpRequest',
'X-CSRF-TOKEN': (csrf_token goes here)
};
Run Code Online (Sandbox Code Playgroud)
这也是我寻找涵盖上述所有要点的解决方案的原因.道歉,我使用的是Laravel 5.6而不是5.5.
更新2:
似乎密码授予/刷新令牌授权组合是要走的路.使用密码授予/刷新令牌授权组合寻找易于遵循的实施指南.
密码授予: 此授权适用于与我们信任的客户交易,例如我们自己网站的移动应用.在这种情况下,客户端将用户的登录凭据发送到授权服务器,服务器直接发出访问令牌.
刷新令牌授权: 当服务器发出访问令牌时,它还会为访问令牌设置到期时间.当我们想要在访问令牌过期时刷新访问令牌时,使用刷新令牌授予.在这种情况下,授权服务器将在发出访问令牌时发送刷新令牌,该令牌可用于请求新的访问令牌.
我正在寻找一个易于实现,直接,全面的答案,使用密码授予/刷新令牌授权组合,涵盖上述原始5点的所有部分与httpOnly安全cookie,创建/撤销/刷新令牌,登录cookie创建,注销cookie撤销,控制器方法,CSRF等
csrf-protection laravel cookie-httponly laravel-5 laravel-passport
我可以在没有任何n + 1问题的情况下急切加载多态关系/模型.但是,如果我尝试访问与多态模型相关的模型,则会出现n + 1问题,而我似乎无法找到修复.以下是在本地查看的确切设置:
1)DB表名/数据
history

companies

products

services

2)模型
// History
class History extends Eloquent {
protected $table = 'history';
public function historable(){
return $this->morphTo();
}
}
// Company
class Company extends Eloquent {
protected $table = 'companies';
// each company has many products
public function products() {
return $this->hasMany('Product');
}
// each company has many services
public function services() {
return $this->hasMany('Service');
}
}
// Product
class Product extends Eloquent {
// each product belongs to a …Run Code Online (Sandbox Code Playgroud) polymorphism polymorphic-associations eager-loading laravel eloquent
我AsyncStorage在React Native中保存了一些项目,我正在使用chrome调试器和iOS模拟器.
如果没有原生的反应,使用常规的Web开发localStorage,我能够看到存储的localStorage项目Chrome Debugger > Resources > Local Storage
任何想法如何查看React Native AsyncStorage存储的项目?
当我有一个notifiable用户时,notifications会插入表格中的一个条目,以及一个完全通过渠道工作的mail/ smssent.
问题是当我有一个user集合,一个跟随我的1k用户列表,我发布了一个更新.以下是Notifiable针对多用户案例建议使用特征时发生的情况:
mails/ sms发送(问题不在这里)notifications表中似乎将1k通知添加到DB notifications表中并不是最佳解决方案.由于该toArray数据是一样的,一切都在数据库中的其他notifications表是1K行相同,与仅作为区别notifiable_id的user notifiable_type.
开箱即用的最佳解决方案是:
array notifiable_typenotifiable_type user_array或user为notifiable_id0(零仅用于表示它是一个多重通知的用户)创建/使用另一个表,notifications_read使用notification_id它刚刚创建的foreign_key并插入1k行,只有这些字段:
notification_id notifiable_id notifiable_type read_at
我希望有一种方法可以做到这一点,因为我在我的应用程序中的这一点,并希望使用内置的通知和通道,因为我正在开火emails/ sms通知,这是好的重复1k次我想,但是相同的数据输入到数据库中是需要优化的问题.
任何想法/想法如何在这种情况下进行?
在React Native中,我有一个静态的书籍数组,我映射并以堆叠的行输出,如下所示:
return books.map((book, i) => {
return(
<View style={styles.book} key={i}>
<Text style={styles.book}>{book.title}</Text>
</View>
);
});
Run Code Online (Sandbox Code Playgroud)
我还在每本书上都有一个下边框styles.book:
book: {
borderBottomWidth: 1,
borderBottomColor: '#000000'
}
Run Code Online (Sandbox Code Playgroud)
我需要列表中的最后一本书没有底边框,所以borderBottomWidth: 0我认为我需要申请它吗?在React Native中,如何让列表中的最后一本书没有底部边框?(在正常的CSS中,我们使用最后一个孩子)
我们能够使用 javascript 检测 iPad 设备,如下所示:
function isDeviceiPad(){
return navigator.platform.match(/iPad/i);
}
Run Code Online (Sandbox Code Playgroud)
这在检测 iPad 设备时效果很好,但是当我们从 中检查时iPad Pro (10.5 inch),它没有检测到它是 iPad。
为了进一步调查,我们深入研究了navigator对象,检查了platform和userAgent,并得到了以下结果:
navigator.platform = 'MacIntel';
navigator.userAgent = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15)
AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.0 Safari/605.1.15)';
Run Code Online (Sandbox Code Playgroud)
问题是navigator.platform = 'MacIntel'(与 MacBook Pro 相同)返回而不是iPad. 我们需要一种方法来检测这是 iPad 而不是 MacBook Pro,但导航器似乎iPad不像旧 iPad那样返回。
知道我们如何解决这个问题吗?
我正在将我的应用程序移植到MySQL的Sphinx中,并且很难解决这个问题,或者甚至需要移植它(我真的想知道是否值得使用sphinx这个特定的效率案例来提高效率/速度):
users
uid uname
1 alex
2 barry
3 david
friends
uid | fid
1 2
2 1
1 3
3 1
Run Code Online (Sandbox Code Playgroud)
细节是:
- InnoDB
- 用户: uid上的索引,uname上的索引
- 朋友: uid上的组合索引,fid
通常,使用mysql搜索所有alex的朋友:
$uid = 1
$searchstr = "%$friendSearch%";
$query = "SELECT f.fid, u.uname FROM friends f
JOIN users u ON f.fid=u.uid
WHERE f.uid=:uid AND u.uname LIKE :friendSearch";
$friends = $dbh->prepare($query);
$friends->bindParam(':uid', $uid, PDO::PARAM_INT);
$friends->bindParam(':friendSearch', $searchstr, PDO::PARAM_STR);
$friends->execute();
Run Code Online (Sandbox Code Playgroud)
使用sphinx vs mysql找到alex的朋友是否更有效率,或者这会是一种矫枉过正?
如果sphinx会更快,因为列表会让成千上万的人看到,索引查询会是什么样子?我如何删除与sphinx不再存在的友谊,我可以在这种情况下有一个详细的例子吗?我应该更改此查询以使用Sphinx吗?
我ListView在单个ScrollView组件中有3 个组件,如下所示:
<ScrollView>
<Header />
<ListView onEndReached={() => alert('load more 1')}/>
<ListView onEndReached={() => alert('load more 2')}/>
<ListView onEndReached={() => alert('load more 3')}/>
<Footer />
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
该Header组件有一些共同的内容,还有3个选项卡,触发显示相应的ListView
问题是任何ListView与onEndReached={() => alert('load more 1')}从未运行警报,所以我向下滚动,撞上列表视图结束时,我不能加载更多.删除包装ScrollView和警报运行,但常见的Header不滚动,因为我们刚刚删除了包装ScrollView.标题需要使用listview滚动,这就是为什么我包装了需要滚动的所有内容ScrollView.
重要提示:
我真的不能用ListView同renderHeader={this.header},对于这种情况.因为,即使Header将滚动,它会重新描绘的共同Header和3个选项卡每个ListView每次ListView渲染,而不是一次.因此Header,每次每次重新渲染都ListView不会为应用程序削减它.
寻找这个问题的解决方案,其中Header带有listviews 的滚动和onEndReached触发可见的滚动ListView.
react-native ×4
laravel ×3
javascript ×2
laravel-5 ×2
asyncstorage ×1
eloquent ×1
height ×1
image ×1
indexing ×1
ios ×1
ios13 ×1
ipados ×1
laravel-5.3 ×1
mysql ×1
php ×1
polymorphism ×1
reactjs ×1
search ×1
sphinx ×1
width ×1