HTMLコンテンツのレンダリングにReact JSを使用しています。問題は、コードの特定のセクションが何をするのか理解できないことです。
以下のリンクからTodoリストの基本サンプルを見ることができる場合http://facebook.github.io/react/
<script type='text/jsx'>
/** @jsx React.DOM */
var TodoList = React.createClass({
render: function(){
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});
var TodoApp = React.createClass({
getInitialState: function(){
return {items:[], text: ''}
},
onChange: function(e)
{
this.setState({text: e.target.value});
},
handleSubmit: function(e)
{
e.preventDefault();
var nextItems = this.state.items.concat([this.state.text]);
var nextText = ''
this.setState({items: nextItems, text: nextText});
},
render:function(){
return (
<div>
<h3>ToDo List</h3>
<TodoList items={this.state.items}/>
<form onSubmit={this.handleSubmit}>
<input type="text" onChange={this.onChange} value={this.state.text}/>
<button>Add #{this.state.items.length+1}</button>
</form>
</div>
)
}
});
React.render(<TodoApp />, document.getElementById('toDoListApp'));
</script>
私は基本的にmapが何をするのか、アイテム作成パラメーターがどのように機能するのかを理解できません。誰でも同じ詳細を提供できますか:
var TodoList = React.createClass({
render: function(){
var createItem = function(itemText) {
return <li>{itemText}</li>;
};
return <ul>{this.props.items.map(createItem)}</ul>;
}
});
ありがとう、Ankit
map
はReact.jsの機能ではありません。必要な配列でこの関数を呼び出すことができます。そのために MDNのドキュメント を見てください。
基本的に、mapは、配列を変更されたアイテムを持つ別の配列に変換するためのものです。例えば:
[1,2,3].map(function(item){
return item+1;
})
このような新しい配列を返します:[2,3,4]
この例では、mapを使用して、「string」型の項目を持つ配列をReact.DOM.li要素の配列に変換します。
あなたの例のautorもこのようにしたかもしれません
var TodoList = React.createClass({
render: function(){
return <ul>{this.createItems(this.props.items)}</ul>;
},
createItems: function(items){
var output = [];
for(var i = 0; i < items.length; i++) output.Push(<li>{items[i]}</li>);
return output;
}
});
props
は、親から子コンポーネントに渡されるプロパティを含むオブジェクトです。
したがって、_props.items
_は、配列であるitems
という名前のプロパティです。
props.item.map()
は、items
配列をli
sの配列にマップします。
_this.props.items
_は配列であり、map
は_callback function
_に従って新しい配列を返します。これは最初の引数として提供され、ES6とJSXの使用は簡単です。
<tr> { this.arr.map((obj, i) => <td key={i}> {obj.name} </td>) } </tr>
この例では、_td's
_の配列を返します
かかる this.props.items
配列、各項目をcreateItem
関数に渡し、各呼び出しの戻り値の配列を返します。
特にそのコードの場合、this.props.items
:
["Item 1 text", "Item 2 text", ..]
マップ呼び出しから次のようなものが得られます。
["<li>Item 1 text</li>","<li>Item 2 text</li>",..]