所以我在一周前开始学习React,我不可避免地遇到了状态问题以及组件应该如何与应用程序的其余部分进行通信.我四处搜索,Redux似乎是这个月的味道.我阅读了所有文档,我认为这实际上是一个非常具有革命性的想法.以下是我的想法:
国家通常被认为是非常邪恶的,并且是编程中的大量漏洞.而不是在整个应用程序中散布它全部Redux说为什么不把它全部集中在一个全局状态树中,你必须发出改变的动作?听起来不错.所有程序都需要状态,所以让我们把它放在一个不纯净的空间中,只在那里修改它,这样就很容易找到错误.然后我们也可以声明性地将各个状态片段绑定到React组件并让它们自动重绘,一切都很美.
但是,我对这整个设计有两个问题.首先,为什么状态树需要是不可变的?说我不关心时间旅行调试,热重新加载,并且已经在我的应用程序中实现了撤消/重做.必须这样做似乎很麻烦:
case COMPLETE_TODO:
return [
...state.slice(0, action.index),
Object.assign({}, state[action.index], {
completed: true
}),
...state.slice(action.index + 1)
];
Run Code Online (Sandbox Code Playgroud)
而不是这个:
case COMPLETE_TODO:
state[action.index].completed = true;
Run Code Online (Sandbox Code Playgroud)
更不用说我正在制作一个在线白板只是为了学习,每个状态的变化可能就像在命令列表中添加画笔笔划一样简单.经过一段时间(数百次刷子)复制整个阵列可能会开始变得非常昂贵和耗时.
我没有使用独立于通过操作进行变异的UI的全局状态树,但它确实需要是不可变的吗?像这样的简单实现有什么问题(非常粗略的草案.在1分钟内写完)?
var store = { items: [] };
export function getState() {
return store;
}
export function addTodo(text) {
store.items.push({ "text": text, "completed", false});
}
export function completeTodo(index) {
store.items[index].completed = true;
}
Run Code Online (Sandbox Code Playgroud)
它仍然是一个通过发出的动作而变异的全局状态树,但非常简单和有效.
存在File.ReadAllLines
但不存在Stream.ReadAllLines
.
using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("Test_Resources.Resources.Accounts.txt"))
using (StreamReader reader = new StreamReader(stream))
{
// Would prefer string[] result = reader.ReadAllLines();
string result = reader.ReadToEnd();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点,还是我必须逐行手动循环文件?
使用HTML5和Canvas制作绘画应用.
我想我想要一个类似于Paint和Photoshop等应用程序的系统,你可以选择主色和二色,然后用左键单击用主色绘画,然后右键单击用二次色绘画.
但是,在释放鼠标右键后,将显示浏览器中的上下文菜单(查看图像,保存图像,全选).
这可以优雅地禁用吗?我不希望它是一个只在可能的情况下才适用于某些浏览器的hackish解决方案.
谢谢.
我正在使用Javascript和Canvas制作绘画应用程序,并使用此格式的字符串来指定所选颜色:
"rgb(255,0,0)"
因为canvas上下文fillStyle属性接受该格式的字符串.
但是,我现在需要从这个字符串中获取单个组件,并且想知道是否有办法在没有混乱的字符串操作的情况下执行它.可能有一些内置的方法将该字符串转换为某种颜色对象,然后访问其r,g和b组件?
谢谢.
在我的一个脚本上,我有这个代码:
var webSocket = window.WebSocket || window.MozWebSocket;
window.ws = new webSocket('ws://64.121.210.140:2585/consoleappsample', 'my-protocol');
Run Code Online (Sandbox Code Playgroud)
哪个工作正常.但是,当用户更改页面时,我必须重新建立连接.我相信这会导致我的代码出现问题,因为如果客户端将数据发送到服务器然后更改页面,则可能无法接收数据并且正在发生竞争条件.
我试图把它window.ws
放在全球范围内,但它似乎没有解决问题.WebSockets连接是否有任何方法可以在页面之间保留,因此不需要不断重新建立连接?
我正在尝试将body元素置于HTML页面的中心位置.
基本上,在CSS中我将body元素设置display: inline-block;
为仅与其内容一样宽.这很好.但是,margin: 0px auto;
不会将其放在页面上.
有谁知道如何解决这一问题?我希望大蓝色方块在页面上居中,而不是像现在一样向左浮动.
这是我的CSS:
body {
display: inline-block;
margin: 0px auto;
text-align: center;
}
Run Code Online (Sandbox Code Playgroud) 我发现的唯一类似的问题是这个,答案建议必须使用Reflector找出答案.
在大多数情况下呢?通常,在方法中首先或最后调用的基本方法是什么?
我注意到在一些库中,它在方法的开头被调用,在XNA Framework中,它们在方法的末尾被调用(base.Update,base.Draw,et cetera).
我正在阅读有关TcpClient.Close()的文档并注意到这一点:
调用此方法最终将导致关联的Socket关闭,并且还将关闭用于发送和接收数据的关联NetworkStream(如果已创建).
因此,纠正我,如果我错了,但是这说,如果一个调用Close()
的TcpClient
是,NetworkStream
也将被关闭.
那么为什么在代码示例的末尾都会Close()
被调用?
networkStream.Close();
tcpClient.Close();
Run Code Online (Sandbox Code Playgroud)
只打电话会一样tcpClient.Close();
好吗?
这两个值来自TaskContinuationOptions枚举.我有点不确定使用哪一个.
另一对我感到困惑的是NotOnRanToCompletion
和OnlyOnFaulted
.
措辞对我来说有点混乱,每对中的每个值似乎都有相同的功能.我在这里错过了什么吗?
var tools = {};
tools.triangle = function() {
var originX = 0;
var originY = 0;
}
Run Code Online (Sandbox Code Playgroud)
var tools = {};
tools.triangle = function() {
this.originX = 0;
this.originY = 0;
}
Run Code Online (Sandbox Code Playgroud)
这两个代码块之间有什么区别吗?对不起,如果之前有人询问过.