私は持っているアイテムのリストをドラッグ&ソートできるようにSortable(https://github.com/RubaXa/Sortable)を使用しています。これをcomponentDidMount
にロードして、実際の並べ替え機能が動作するようにします。しかし、それがajaxリクエストに達すると、私は400の悪い要求を受け取ります。私はそれはそれがある文脈とは関係があると思うが、私はそれを整理したと思った。componentDidMountからのリクエストが正しくありません
私は単にcomponentDidMountを省略し、関数をリスト項目に追加するだけで、要求は正常に機能します。私がこれをやめるのを止める唯一の事は、Sortableがロードされる前にリストアイテムがクリックを必要とすることです。
提案がありますか?ありがとう!
var ToDoList = React.createClass({
getInitialState: function() {
return {}
},
componentDidMount: function(){
this.moveItem();
},
moveItem: function(id){
var el = document.getElementById('list');
var sortable = Sortable.create(el, {
onSort: function(evt) {
var data = { todo_id: id, old_index: evt.oldIndex , new_index: evt.newIndex }
$.ajax({
url: "/todo/api/v1.0/move-task",
type: "POST",
data: data,
context: this,
success: function(data, status, xhr) {
var updated_todos = this.props.changeTodos(data);
}
});
}
});
},
render: function(){
return (<ul id="list">
{this.props.todos.map((todo, index) => (
<li onMouseDown={this.moveItem.bind(this, todo._id.$oid)} key={todo._id.$oid} data-id={todo._id.$oid} className={"list-item"}>
<input checked={todo.complete} onChange={this.completeItem.bind(this, todo._id.$oid)} type="checkbox" />
<div className={"item " + todo.complete }>{todo.item}</div>
<div className="move">△▽</div>
<div className="delete" onClick={this.deleteItem.bind(this, todo._id.$oid)}>x</div>
</li>
))}
</ul>
);
}
});
あなたはidなしでthis.moveItem();を呼び出します。 – degr
はこのように考えられました。 idを 'componentDidMount'関数に渡す方法は? – luke
componentDidMount()内のアイテムを移動しようとしているのはなぜですか? componentDidMountは一度だけ呼び出されます。私はあなたがそこにリストをあらかじめロードしているかもしれないと理解できますが、アイテムの1つを動かすことは意味をなさないと思われます。あなたの意図は何ですか?あなたは何をしようとしているのですか?それは正解を見つけるのを助ける –