【问题标题】:Strange behavior/loading patterns when using React + Meteor pre-filling forms使用 React + Meteor 预填充表单时的奇怪行为/加载模式
【发布时间】:2016-07-06 05:46:32
【问题描述】:

悬崖:

我正在尝试从用户以前的条目中预先填写表单,这些条目都存储在 MongoDB 集合中我这样做是使用传统的 Javascript:

componentDidMount(){
 let name = document.getElementById("name");
    name.value = this.props.iData.name;
}

除非我刷新页面,否则这会正常工作,在这种情况下,我会收到 this.props.iData 未定义的错误。因此,每当我访问带有预填充数据的页面时,它都能正常工作,订阅也能正常工作。但是当我刷新同一页面时,订阅的加载速度不够快。

订阅是这样完成的:

export default createContainer(function(){
  const subHandle = Meteor.subscribe("iData", function(){
  });
  const isLoading = !subHandle.ready();
  return {
    isLoading,
    iData: Poll.find().fetch(),
  }
}, UserSettings)

我一定是做错了什么,才会以这种方式发生。

【问题讨论】:

    标签: meteor reactjs


    【解决方案1】:

    您是否确保在调用 componentDidMount 时您的数据已准备就绪。而且你不应该在反应中使用 document.getElementById()。

    在 react 中你需要使用 refs。

    class Sample extends React.Component {
      componentDidMount() {
        this.ref.input.value = 'some value';
      }
      
      render() {
        return (
          <input ref="input" />
        );
      }
    }

    您也可以这样做:

    class Sample extends React.Component {
        render() {
            return (
              <div>
                {!this.props.isLoading ? (
                 <input value = {this.props.someValue}/>
                ) : (
                  <p>Loading </p>
                )}
              </div>
            );
        }
    }
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

    【讨论】:

    • 感谢您提醒我使用 refs 而不是 ids。无论如何,我确保在componentDidMount() 触发之前加载了数据,但是当我刷新页面或单击返回按钮时,我仍然遇到相同的错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-23
    • 2016-01-21
    • 2017-09-23
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多