Javascript 如何编写状态更改例程,类似于Redux?

Javascript 如何编写状态更改例程,类似于Redux?,javascript,reactjs,react-native,redux,Javascript,Reactjs,React Native,Redux,我如何编写一个真正超级、简单的状态更改例程?我需要像Redux这样的东西,但更简单的是,不需要所有的铃声和口哨 我想到了一个全局对象,即myState={},它通过setMyState()/getMyState()进行更改 我正在使用JavaScript,想知道这是否可以通过一个计时器来完成,该计时器每隔10毫秒左右进行一次民意调查 因此,在我的JavaScript客户端应用程序中(我使用的是ReactJS),在render()中调用我的getMyState(“显示菜单”)将更新组件的状态,就像

我如何编写一个真正超级、简单的状态更改例程?我需要像Redux这样的东西,但更简单的是,不需要所有的铃声和口哨

我想到了一个全局对象,即
myState={}
,它通过
setMyState()/getMyState()
进行更改

我正在使用JavaScript,想知道这是否可以通过一个计时器来完成,该计时器每隔10毫秒左右进行一次民意调查

因此,在我的JavaScript客户端应用程序中(我使用的是ReactJS),在
render()中调用我的
getMyState(“显示菜单”)
将更新组件的状态,就像使用
this.state.
一样

我想这样做的原因是: 1) 想知道如何写它来学习。 2) 需要一些比Redux更简单的东西,比如Meteor的会话变量,所以不必通过这个。下至在父组件上设置状态的子组件。
3) Redux是一个很好的工具,还有很多东西需要消化和学习使用Redux

似乎只需一个构造函数就可以做到这一点

function State () {
   this._state = {};
...
}

State.prototype.get = function () {
    return this._state;
};

State.prototype.set = function (state) {
    return this._state = state;
};

var STATE = new State();

但是你必须做你在帖子中提到的投票。或者,您可以查看javascript的eventEmitter库,例如,将状态对象转换为事件发射器。

似乎您可以用构造函数简单地完成这项工作

function State () {
   this._state = {};
...
}

State.prototype.get = function () {
    return this._state;
};

State.prototype.set = function (state) {
    return this._state = state;
};

var STATE = new State();
但是你必须做你在帖子中提到的投票。或者,您可以查看javascript的eventEmitter库,例如,将状态对象转换为事件发射器。

Update 不确定这是否是你想要的,但它更简单

function makeStore () {
  var state = { };
  return {
    set (key, value) { state[key] = value; },
    get (key) { return state[key]; }
  };
}


const store = makeStore();

store.set("counter", 1);
store.get("counter"); // 1

信不信由你,真的没什么可重复的。 也许,有很多事情需要考虑,而且要把所有东西从你的商店里解开是额外的工作

但请快速查看:

function reducer (state, action) {
  state = state || { count: 0 };
  const direction = (action.type === "INCREASE") ? 1 : (action.type === "DECREASE") ? -1 : 0;
  return {
    count: (state.count + direction)
  };
}

function announceState () {
  console.log(store.getState());
}

function updateView () {
  const count = store.getState().count;
  document.querySelector("#Output").value = count || 0;

}
function increase () {
  store.dispatch({ type: "INCREASE" });
}
function decrease () {
  store.dispatch({ type: "DECREASE" });
}

const store = createStore(reducer, { count: 0 });
store.subscribe(announceState)
     .subscribe(updateView);

document.querySelector("#Increment").onclick = increase;
document.querySelector("#Decrement").onclick = decrease;
updateView();
这是我打算使用的代码。
看看它,我几乎只是在创建一个存储(每次发生事件时都会运行一个函数),订阅运行一个侦听器,在存储更新后,有一行我触发一个操作,并且。。。好了,就这样

函数createStore(reduce,initialState){
var状态=初始状态;
var侦听器=[];
函数notifyAll(){
forEach(update=>update());
}
功能分派(事件){
const newState=reduce(状态、事件);
状态=新闻状态;
notifyAll();
退货店;
}
函数订阅(侦听器){
listeners.push(listener);
退货店;
}
函数getState(){
返回状态;
}
常数存储={
获取状态、订阅、调度
};
退货店;
}
//这是我的申请代码
功能减速机(状态、动作){
状态=状态| |{计数:0};
常量方向=(action.type==“增加”)?1:(action.type==“减少”)?-1:0;
返回{
计数:(state.count+方向)
};
}
函数状态(){
log(store.getState());
}
函数updateView(){
const count=store.getState().count;
document.querySelector(“输出”).value=count | | 0;
}
功能增加(){
dispatch({type:“INCREASE”});
}
功能减少(){
dispatch({type:“reduce”});
}
const store=createStore(reducer,{count:0});
store.subscribe(宣布状态)
.订阅(更新视图);
document.querySelector(“#Increment”).onclick=Increment;
document.querySelector(“减量”).onclick=减量;
updateView()
-
+
更新 不确定这是否是你想要的,但它更简单

function makeStore () {
  var state = { };
  return {
    set (key, value) { state[key] = value; },
    get (key) { return state[key]; }
  };
}


const store = makeStore();

store.set("counter", 1);
store.get("counter"); // 1

信不信由你,真的没什么可重复的。 也许,有很多事情需要考虑,而且要把所有东西从你的商店里解开是额外的工作

但请快速查看:

function reducer (state, action) {
  state = state || { count: 0 };
  const direction = (action.type === "INCREASE") ? 1 : (action.type === "DECREASE") ? -1 : 0;
  return {
    count: (state.count + direction)
  };
}

function announceState () {
  console.log(store.getState());
}

function updateView () {
  const count = store.getState().count;
  document.querySelector("#Output").value = count || 0;

}
function increase () {
  store.dispatch({ type: "INCREASE" });
}
function decrease () {
  store.dispatch({ type: "DECREASE" });
}

const store = createStore(reducer, { count: 0 });
store.subscribe(announceState)
     .subscribe(updateView);

document.querySelector("#Increment").onclick = increase;
document.querySelector("#Decrement").onclick = decrease;
updateView();
这是我打算使用的代码。
看看它,我几乎只是在创建一个存储(每次发生事件时都会运行一个函数),订阅运行一个侦听器,在存储更新后,有一行我触发一个操作,并且。。。好了,就这样

函数createStore(reduce,initialState){
var状态=初始状态;
var侦听器=[];
函数notifyAll(){
forEach(update=>update());
}
功能分派(事件){
const newState=reduce(状态、事件);
状态=新闻状态;
notifyAll();
退货店;
}
函数订阅(侦听器){
listeners.push(listener);
退货店;
}
函数getState(){
返回状态;
}
常数存储={
获取状态、订阅、调度
};
退货店;
}
//这是我的申请代码
功能减速机(状态、动作){
状态=状态| |{计数:0};
常量方向=(action.type==“增加”)?1:(action.type==“减少”)?-1:0;
返回{
计数:(state.count+方向)
};
}
函数状态(){
log(store.getState());
}
函数updateView(){
const count=store.getState().count;
document.querySelector(“输出”).value=count | | 0;
}
功能增加(){
dispatch({type:“INCREASE”});
}
功能减少(){
dispatch({type:“reduce”});
}
const store=createStore(reducer,{count:0});
store.subscribe(宣布状态)
.订阅(更新视图);
document.querySelector(“#Increment”).onclick=Increment;
document.querySelector(“减量”).onclick=减量;
updateView()
-

+
浏览器历史记录.state是否有太多的铃声和哨声?浏览器历史记录.state是否有太多的铃声和哨声?这是说
setMyState(“计数器”,值)
的更多代码。然后
count=getMyState(“计数器”)
。查看Meteor中的会话变量。我的目标是超简单。无发货、减速机或仓库。这只是一种更新状态的方法,无需依赖React自己的内置
this.state
。希望这是有道理的。谢谢你的代码示例。顺便说一句@GiantElk实现Meteor和实现Re之间的区别