【问题标题】:Meteor & React with reactive stylingMeteor 和 React 与响应式样式
【发布时间】:2023-04-01 11:13:01
【问题描述】:

作为 Meteor 和 React 的新手,我打算这是一种非响应式的方法,我知道这是不正确的,但我很难弄清楚这样做的正确方法可能是什么。

1) 我认为 logIn 和 logOut 变量应该是一个函数,但我不清楚如何将函数放入渲染中。

2) Meteor.logout(document.location.reload());,似乎不正确。

我觉得我可以将这两个概念合二为一。

export default class Header extends React.Component {
  render() {
    $(".button-collapse").sideNav();
    var navStyle = {
      backgroundColor: "#263238",
      paddingLeft: "10px"
    };
    var logIn = {
      display: (Meteor.userId() ? "none" : "block")
    };
    var logOut = {
      display: (Meteor.userId() ? "block" : "none")
    };
    return (
      <nav style={navStyle}>
        <div>
          <a href="/" className="brand-logo">ShortShape</a>
          <a href="#" data-activates="mobile-demo" className="button-collapse"><i className="material-icons">menu</i></a>
          <ul className="right hide-on-med-and-down">
            <li><a href="/">Home</a></li>
            <li style={logOut}><a href="javascript:Meteor.logout(document.location.reload());">Logout</a></li>
            <li style={logIn}><a href="/register">Register</a></li>
            <li style={logIn}><a href="/login">Login</a></li>
            <li><a href="/stories">Stories</a></li>
          </ul>
          <ul className="side-nav" id="mobile-demo">
            <li><a href="/">Home</a></li>
            <li style={logOut}><a href="javascript:Meteor.logout(document.location.reload());">Logout</a></li>
            <li style={logIn}><a href="/register">Register</a></li>
            <li style={logIn}><a href="/login">Login</a></li>
            <li><a href="/stories">Stories</a></li>
          </ul>
        </div>
      </nav>
    );
  }
}

【问题讨论】:

    标签: javascript css node.js meteor


    【解决方案1】:

    为了使您的组件以反应方式呈现,您需要将其包装在反应容器中。那里有很多响应式容器,但我通常使用 createContainer 这是 Meteor 团队的官方容器

    import { createContainer } from 'meteor/react-meteor-data';
    
    class Header extends React.Component {
      logout() {
        Meteor.logout(() => {
          window.location.reload();
        });
      }
      render() {
        const user = this.props.user;
    
        $(".button-collapse").sideNav();
        var navStyle = {
          backgroundColor: "#263238",
          paddingLeft: "10px"
        };
        var logIn = {
          display: (user ? "none" : "block")
        };
        var logOut = {
          display: (user ? "block" : "none")
        };
        return (
          <nav style={navStyle}>
            <div>
              <a href="/" className="brand-logo">ShortShape</a>
              <a href="#" data-activates="mobile-demo" className="button-collapse"><i className="material-icons">menu</i></a>
              <ul className="right hide-on-med-and-down">
                <li><a href="/">Home</a></li>
                <li style={logOut}>
                  <a onClick={this.logout}>Logout</a>
                </li>
                <li style={logIn}><a href="/register">Register</a></li>
                <li style={logIn}><a href="/login">Login</a></li>
                <li><a href="/stories">Stories</a></li>
              </ul>
              <ul className="side-nav" id="mobile-demo">
                <li><a href="/">Home</a></li>
                <li style={logOut}>
                  <a onClick={this.logout}>Logout</a>
                </li>
                <li style={logIn}><a href="/register">Register</a></li>
                <li style={logIn}><a href="/login">Login</a></li>
                <li><a href="/stories">Stories</a></li>
              </ul>
            </div>
          </nav>
        );
      }
    }
    
    export default createContainer(() => {
      // this function will run reactively
      return {
        user: Meteor.user(),
      };
    }, Header);
    

    【讨论】:

    • window.location.reload(); superfluous? Should Meteor.logout(() => {` 是否有效地改变了条件,或者因为它是一个常数,它没有重新加载就卡住了?
    • 我不明白你的意思。当用户注销时,传递给createContainer 的函数将重新运行。 window.location.reload() 是否需要取决于您的要求,如果您需要清除所有内存数据(例如Session),reload 是一个不错的选择
    • 我想我的问题是,页面需要重新加载,还是有更好的方法来动态更新样式?
    • 进一步,document.location.href 真的是一个好习惯吗?或者有没有更好的路由方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 1970-01-01
    • 2020-09-17
    • 2022-11-13
    • 2018-05-23
    相关资源
    最近更新 更多