我是流星和react的新手。假设我的react组件中有这个:
getMeteorData() {
var myForm = ProjectForm.findOne({_id:this.props.router.params._id});
var projects = ProjectForm.find({});
return {myForm:myForm,projects:projects};
// doing a console.log(myForm); would give you something like
/*
input1:my text 1
input2:some other text
input3:something else
etc....
*/
},
renderListProjects() {
return this.data.projects.map(function(projectform,i) {
return <li key={"li"+i}><a href={Meteor.absoluteUrl()+'project/' + projectform.username +'/' +projectform._id} key={"a"+i}>Project {projectform._id}</a></li>;
});
},
getInitialState() {
return Projects.findOne({this.props.router.params._id}, {sort: {createdAt: -1}});
},
render() {
return (
<div>
<ul>{this.renderListProjects()}</ul>
<form>
<span>Hello this is some text</span>
<input type="text" ref="input1" />
<p>Blah blah this is boring</p>
<input type="text" ref="input2" />
<img src="image-of-a-kangaroo.png" />
<input type="text" ref="input3" />
<ul>
<li>Buy brocolli</li>
<li>Buy oregano</li>
<li>Buy milk</li>
</ul>
<input type="text" ref="input4" />
...
<textarea ref="input100"></textarea>
<input type="text" ref="input101" />
<p><strong>Yes, I like pizza!</strong> But my porcupine gets sick eating pizza.</p>
...
</form>
</div>
);
我想要做的是将 的值分配给this.data.myForm
render() 函数中的每个表单字段。但是,当我执行类似的操作<input type="text" ref="input1" value={this.data.myForm.input1} />
,然后转到 Web 浏览器并将光标放在该字段上时,我无法修改该值。按键盘上的键不会更改该输入字段的值。此外,我在这个 html 表单中有大约 250 个输入字段。我真的不想做任何数据输入。我宁愿只使用某种循环来遍历this.data.myForm
并将其分配给相应的表单字段。但是当我尝试这样做时,我遇到了有关未找到 DOM 或未加载 DOM 的问题。所以我尝试在 componentDidMount() 中编写一些代码,但后来出现了其他错误。
任何人都可以指出我如何有效地将我的所有this.data.myForm
数据绑定到我的表单字段并允许我在之后编辑表单字段的正确方向吗?
其他要求
如果有人从 中单击 link1,
renderListProjects
然后从 中单击 link2renderlistProjects
,则表单必须显示 link2 的值projectform._id
。在 DOM 中,
href="project/_id"
必须存在用于 SEO 和 WCAG 合规性的属性。
尝试
我试图将 renderListProjects 重新定义为
renderListProjects() {
var pj = this
return this.data.projects.map(function(projectform,i) {
return <li key={"li"+i}><a onClick={pj.click(projectform._id)} href={Meteor.absoluteUrl()+'project/' + projectform.username +'/' +projectform._id} key={"a"+i}>Project {projectform._id}</a></li>;
});
},
click(id) {
var currentApp = ProjectForm.findOne({_id:id}, {sort: {createdAt: -1}});
this.setState({input36:input36});
},
但是当我运行我的meteor+react 项目时,我的浏览器崩溃了,因为某种无限循环正在发生。