这是一个概念性问题,我试图理解处理反应中表格数据的最佳方式,而不使用任何特殊组件或库。反应呈现html表格和从html表格中读取
我在我的子组件中动态创建的html表中有数据。数据来自父组件。某些列具有可编辑的内容,我可以通过编辑按钮触发,以重新呈现具有可编辑列的所有行的内嵌文本框的表格版本。
当我更改文本框的内容时,我希望能够点击我的保存按钮并保存所有行。
保存和编辑按钮不是在表格上内联,而是坐在我的组件的表格外。
如何从父组件中访问我的子组件中的html表以读取所有行并将文本框中的值保存到数据存储区?
这里是我试图动态构建选择列表的代码片段。我遇到了一些语法错误,并且它不工作,但它提供了我想要做的事情的一个概念。
我正在传入类别和事务ID。我想在选择编辑模式时将选择列表添加到表格中每行的每个类别单元格中。事务标识是我的解决方案,通过将1添加到事务标识来让列表中的当前行的索引可用。然后,我将使用选定的索引-1来获取用于更新相应记录类别的事务标识。这可能是一种黑客行为,但我想不出将事务链接到选择列表的正确方式或更好的方式。
renderCategory(category,transid){
console.log(category);
if (this.props.editMode === true){
return <div>
<select id="selCategory" onChange={this.props.onCategoryChange}>
const arrCategory = ["Category1","Category1","Category2","Category3","Category4","Category5","Category6","Category7"];
var i;
for (i = 1;arrCategory.length+1;i++){
<option value={transid+1}>{arrCategory[i-1]}</option>
if(arrCategory[i-1] === category) {
selectedIndex = i-1;
}
}
</select>
</div>
}
else {
return category
}
}
在这里,我有父母的代码来处理我的孩子选择列表的onChange事件。
handleCategoryChange(e) {
// this will have to be changed because I'm using the index value to store the transaction id
alert("The Child HTML is: " + e.target.innerHTML + "The selected value is: " + e.target.options[e.target.selectedIndex].value);
//// update the date which is in parent state to reflect the new value for category for the passed in transaction id (the problem is I don't know what the transaction id is...)
}
太好了。谢谢。但是,在触发onChange的元素是嵌套在表格单元格中的选择列表的情况下,如何捕获行索引?子组件中表的第一个单元格具有一个id值,该值是应该应用更新的行。 –
我想你会使用[map](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map)遍历数据并渲染表格行。在这个map函数中,你可以传递第二个参数索引来获得索引号。 [1,2,3] .map(val,index => console.log(index)) 您可以查看[this](http://stackoverflow.com/a/38364482/3920820)回答为以及如果我所解释的不明确 – Swapnil
我添加了一些示例代码来解释我卡在哪里,并给出了我所拥有的“概念”问题的一些想法。基本上,我如何将行的事务ID绑定到列表。我不能这样做,因为onChange是由列表触发的,并且不包含列表所属的行/事务ID的任何信息。 –