Reactjs: Key undefined when accessed as a prop

左心房为你撑大大i 提交于 2020-04-29 08:26:19

问题


Tools: Reactjs 0.14.0 Vanilla Flux

I need unique identifiers for 2 reasons:

  1. Child Reconciliation
  2. Keeping track of what child was clicked

So let's say I have a list of messages that looks like this:

[
      {
        id: 1241241234,  <-----The unique id is kept here
        authorName:"Nick"
        text:"Hi!"
      },
      ...
]

And now I use a "Array.prototype.map()" to create "ownee" component(MessageListItem) inside of the owner component MessageSection

function getMessageListItem)(message) {

  return (
    <MessageListItem key={message.id} message={message}/>
  );
}

var MessageSection = React.createClass({
   render: function(){
       var messageListItems = this.state.messages.map(getMessageListItem);
       <div>
           {messageListItems }
       </div>
   }
});

But the this.props.key is undefined in the MessageListItem even though I know for a fact that is was defined when it was passed down.

var ConvoListItem = React.createClass({
  render: function() {
    console.log(this.props.key); //Undefined
  }
});

I'm guessing there is a reason that React is not letting "key" to be used as a prop.

Question:

If I can't use key as a prop - then what is the proper way to handle the duality need of keying and setting unique identifiers on a dynamic list of child elements that contain state?


回答1:


It is best to use id. Then in the eventHandler you can have event.target.id.

function getMessageListItem)(message) {

  return (
    <MessageListItem key={message.id} id={message.id} message={message}/>
  );
}



回答2:


key and ref aren't really 'props'. They're used internally by react and not passed to components as props. Consider passing it as a prop such as 'id'.




回答3:


As we already established in other answers that you can't use key since it isn't passed as a prop and instead used internally by react. Here is my 2 cents as an alternative:
Since you're passing the entire array of messages as a prop while creating the <MessageListItem> component, you don't necessarily need to pass another prop with id. You can simply use {this.props.message.id} whenever you need to use id.



来源:https://stackoverflow.com/questions/33661511/reactjs-key-undefined-when-accessed-as-a-prop

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!