我正在尝试重构我的应用程序以分离表示和容器组件.我的容器组件只是在connect()
react-redux调用中包含的表示组件,它将状态和动作创建器映射到表示组件的道具.
待办事项,list.container.js
import React, {Component} from 'react';
import {connect} from 'react-redux';
import {fetchTodos} from '../actions/todo.actions';
import TodoList from '../components/todo-list.component';
export default connect(({todo}) => ({state: {todo}}), {fetchTodos})(TodoList);
Run Code Online (Sandbox Code Playgroud)
待办事项,list.component.jsx
import React, {Component} from 'react';
import TodoContainer from '../containers/todo.container';
export default class TodoList extends Component {
componentDidMount () {
this.props.fetchTodos();
}
render () {
const todoState = this.props.state.todo;
return (
<ul className="list-unstyled todo-list">
{todoState.order.map(id => {
const todo = todoState.todos[id];
return <li key={todo.id}><TodoContainer todo={todo} /></li>;
})}
</ul>
);
}
};
Run Code Online (Sandbox Code Playgroud)
todo.container.js …
我注意到几乎所有Express.js应用程序的示例都使用端口3000作为HTTP服务器的默认侦听端口.这只是因为它是一个很少使用的端口,或者这个端口号是否还有其他原因?
如果我想在我的本地机器上并排运行多个应用程序,那么使用3000,3001,3002等端口是否是一个好习惯?
(我理解,理想情况下,你让系统分配端口.这只是一个简单的问题,为什么3000似乎是一个传统的任务.)
我已经离开了PHP/MySQL中的舒适区域,因为语法/封装/程序化的东西会令人沮丧.
上周,我开始玩并参与一些教程,使用Node.js/Socket.IO创建实时聊天应用程序.到目前为止,我从未对WebSockets做过任何事情,而且看起来真的很酷 - 服务器和客户端之间的即时通信非常棒.
现在,请原谅我在这里缺乏理解,但是设置了HTTP,这样你就不应该能够在客户端和服务器之间保持连接 - 而且我对Comet的基本理解是它强制连接保持打开状态永远不会终止写入流并只发送NUL字节.这听起来......服务器密集.
那么WebSockets如何工作呢?如果我一次在我的聊天应用程序上有几百人,服务器不会超载吗?当我在服务器上使用PHP/MySQL时,服务器一次只处理一个请求 - 如果我每隔一秒钟使用AJAX并进行一次轮询,我想它会快速升级,因为你有数千个请求一分钟.
我的问题是,WebSockets是否适用于大型应用程序?没有真正高带宽的服务器是否实用?
我想这归结为:在频繁间隔的AJAX轮询,Comet和WebSockets之间是否存在显着的服务器负载/用户体验差异?
谢谢!
当我调用session_start()
或者session_regenerate_id()
,PHP生成看似是会话ID的随机字符串.我想知道的是,它只是一个随机的字符序列,还是像uniqid()
函数一样?
因为如果它只是随机字符,理论上你不能遇到冲突吗?如果用户A已登录,然后用户B已登录,并且尽管用户B生成相同的会话ID,但用户B最终无法访问用户A的帐户.
即使PHP检查是否已经存在具有相同ID的会话,如果是,再次重新生成ID ...我不认为我想要一个EVER产生相同ID两次的系统,即使在垃圾收集之后 - 也许我想存一张它们的表格并检查它们是否有可能被劫持或其他什么.
如果它不是唯一的,我该如何强制执行唯一性?我宁愿使用PHP配置来实现它,而不是在我制作的每个脚本中实现它.PHP会话的好处不是担心幕后的技术细节.
是否有可能建立一个JSON模式,它仍然允许additionalProperties
但不若一个非常特别的属性名存在匹配吗?换句话说,我需要知道是否可能与required
声明完全相反.
架构:
{
"type": "object",
"properties": {
"x": { "type": "integer" }
},
"required": [ "x" ],
"ban": [ "z" ] // possible?
}
Run Code Online (Sandbox Code Playgroud)
比赛:
{ "x": 123 }
Run Code Online (Sandbox Code Playgroud)
比赛:
{ "x": 123, "y": 456 }
Run Code Online (Sandbox Code Playgroud)
难道不匹配:
{ "x": 123, "y": 456, "z": 789 }
Run Code Online (Sandbox Code Playgroud) 这可能是一个不寻常的请求,但对于我的脚本,我需要一个按字母而不是数字递增的函数.例如:
这是一个数字示例:
var i = 0;
while(condition){
window.write('We are at '+i);
++i;
}
Run Code Online (Sandbox Code Playgroud)
从本质上讲,我想用字母来计算,比如Microsoft Excel,而不是数字.所以不是打印"我们在0","我们在1","我们在2"等,我需要打印"我们在A","我们在B","我们在C"等
为了模仿Excel(我能想到的唯一例子),在达到索引25(Z)后,我们可以转到'AA','AB','AC'等.
所以它会像这样工作:
var i = 0;
while(condition){
window.write('We are at '+toLetter(i));
++i;
}
Run Code Online (Sandbox Code Playgroud)
如果有人可以写一个函数然后将一个字母转换回一个数字,即toNumber('A')= 0或toNumber('DC')= 107(我认为),那就更好了.
谢谢!
是否可以使用Sequelize在MySQL表上创建一个列,可以在创建新行时初始化,但从不更新?
例如,REST服务允许用户更新其配置文件.他可以改变除他之外的任何领域id
.我可以id
从API路由上删除请求,但这有点多余,因为有许多不同的模型行为相似.理想情况下,我希望能够在Sequelize中定义一个约束,以防止将id
列设置为除以外的任何内容DEFAULT
.
目前,我使用setterMethod
了id
手动抛出ValidationError
,但这似乎hackish的,所以我在想,如果有这样做的更清洁的方式.更糟糕的是,这个实现仍然允许id
在创建新记录时设置,但我不知道如何解决这个问题,因为当Sequelize生成它调用setterMethods.id
以设置值的查询时DEFAULT
.
return sequelize.define('Foo',
{
title: {
type: DataTypes.STRING,
allowNull: false,
unique: true,
validate: {
notEmpty: true
}
}
},
{
setterMethods: {
id: function (value) {
if (!this.isNewRecord) {
throw new sequelize.ValidationError(null, [
new sequelize.ValidationErrorItem('readonly', 'id may not be set', 'id', value)
]);
}
}
}
}
);
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Ace Editor进行相当简单的操作:让编辑器跳转到特定的行.但是,我不能让它工作!
看到这个jsFiddle:http://jsfiddle.net/Xu9Tb/
var editor = ace.edit('editor');
editor.scrollToLine(50, true, true, function () {});
// Doesn't do anything at all
editor.gotoLine(50, 10, true);
// Will move the caret to the line, but it will not scroll
// to the editor to the line if it's off screen
Run Code Online (Sandbox Code Playgroud)
有什么建议?
谢谢.
我正在尝试对弹出窗口的DOM执行操作,但由于某种原因,ready
事件会在弹出窗口中立即触发,然后才会出现DOM中的任何内容.
我知道jQuery可以通过使用上下文访问弹出窗口的DOM,并且我可以设法通过使用setTimeout
延迟任何操作直到合理的时间量已经过去.
(function ($) {
$(function () {
var popup = window.open('/test');
// JSFiddle 404 page
$(popup.document).ready(function () {
// Should fire when the DOM of the 404 page has loaded...
$('h2', popup.document).css('color', '#FF0000');
// Change the color of the header to red.
console.log($('h2', popup.document).length);
// Should log 1
// Logs 0, though, because this function fires immediately, before the DOM loads.
});
setTimeout($.proxy(function () {
// This will definitely fire after the DOM of …
Run Code Online (Sandbox Code Playgroud) 如果我有一个实现Iterator
接口的类,我可以手动控制循环中的迭代方式foreach
.但是有没有其他方法可以让我的对象像数组一样?
例如,假设我有一个Guestbook
实现的类Iterator
,以便我可以迭代foreach (new Guestbook() as $entry)
.但是,如果我想要反转订单呢?
foreach (array_reverse(new Guestbook()) as $entry)
绝对不会工作,因为array_reverse
只会接受一个数组.
我想我要问的是,我可以使用Iterator
的不仅仅是foreach
循环吗?
谢谢.
javascript ×3
node.js ×3
php ×2
ace-editor ×1
api ×1
arrays ×1
comet ×1
cookies ×1
count ×1
counter ×1
express ×1
foreach ×1
http ×1
iterator ×1
jquery ×1
json ×1
jsonschema ×1
mysql ×1
numbers ×1
port ×1
react-redux ×1
reactjs ×1
redux ×1
rest ×1
sequelize.js ×1
session ×1
websocket ×1
window.open ×1