【问题标题】:Can anyone help me understand why my arguments don't trigger when Session variable changes with React?谁能帮我理解为什么当 Session 变量随 React 发生变化时我的参数不会触发?
【发布时间】:2016-07-16 00:17:21
【问题描述】:

我正在尝试根据 Session 变量是 true 还是 false 在活动和非活动按钮之间切换。

在子组件上,我声明了 Session 变量:

  choice(e){
    e.preventDefault();
  ...
    Session.set("upNext", true);
   ...

  };

然后,在父组件上,我将这段代码放在 render(){} 函数中:

render(){

let upNext;
if(Session.get("upNext")){
upNext = <button className="ui right huge labeled icon primary button" onClick={this.nextPosition.bind(this)}><i className="right arrow icon"></i>Next</button>
} else{
upNext = <button className="ui right huge labeled icon primary button disabled" onClick={this.nextPosition.bind(this)}><i className="right arrow icon"></i>Next</button>
}

  return(
    <div className="ui container">
      {upNext}
    </div>
  }

最后,在 componentWillMount() 方法中,我将 Session 变量设置为 false 以在下一个组件加载之前重置。

Session 变量触发,从 false 变为 true,但第一个条件(如果 Session.get 等于 true)中的代码永远不会运行。使用 Blaze 时从未发生过这个问题,所以这里一定有一些我完全想念的东西。

【问题讨论】:

    标签: meteor


    【解决方案1】:

    我刚刚决定用好的旧 javascript 解决这个问题,并在单击按钮后自己操作 className 属性,而不是依赖于 Session 变量。

    不过,为什么 Sessions 对 React 的行为很奇怪,这有点奇怪。

    【讨论】:

    • 您可以将会话值设置为组件容器中的反应变量,因此当它更改时会触发组件道具的更改,从而导致再次调用渲染函数。
    • 我在 createContainer 组件中使用了 ReactiveVar 而不是 Session 变量,它起作用了。
    【解决方案2】:

    您可以在 createContainer - https://guide.meteor.com/react.html#using-createContainer 中添加需要响应的部分代码

    【讨论】:

    • 我在 createContainer 组件中使用了 ReactiveVar 而不是 Session 变量,它起作用了。无论我做什么,会话变量都不起作用。
    猜你喜欢
    • 1970-01-01
    • 2017-05-09
    • 1970-01-01
    • 2021-12-18
    • 1970-01-01
    • 2022-11-26
    • 2023-03-26
    • 2012-06-13
    • 2016-01-27
    相关资源
    最近更新 更多