2017-12-04 15 views
0

ドラッグ&ドロップでリストアイテムの順序を変更するには、react-native-sortable-listviewを使用しています。アイテムをドラッグするだけで、レンダリングされ、その位置は更新されますが、他のアイテムは前の位置にあります。このコンポーネントが何らかの増分ボタンのように他の原因で再レンダリングされると、すべての位置が正しいことになります。 私のreact-native-sortable-listがレンダリングされるときに私の質問がありますが、これをもう一度再レンダリングする方法があります。 forceUpdate()this.setState()でレンダリングする方法はどちらも、レンダリング機能で状態を更新できないため、私はフォローできませんでした。 これを実行する方法は何かできます。あなたはそのイベントをキャプチャし、)(SETSTATEを呼び出す必要があり、あなたのコンポーネントがレンダリングされているものの段階で基本的にレンダリング後にコンポーネントを更新する

componentWillMount =() => { 
    this.setState({ 
    data: myData 
    }); 
} 

;:

+0

こんにちは、いくつかのコードを共有してください。私はあなたが 'renderRow'と' onChangeOrder'の組み合わせを使ってそれを達成できるはずだと思います。 –

+0

私はこの[question](https://stackoverflow.com/questions/47608834/update-of-all-places-in-react-native-sortable-listview)をコードと共に投稿しましたが、誰も興味を持っていません私は要約フォームに投稿する必要があります –

+0

しかし、コードがない場合、私はあなたを助けることができません。基本的な例を少なくとも共有してください –

答えて

0

componentWillMountまたはcomponentDidMountを使用してみてくださいまた、ボタンを使って再レンダリングすることもできます。ユーザーがボタンをクリックした後、setState();お役に立てれば!

+1

will/didMount()は、最初のレンダリングの前後に一度だけ呼び出されるため、これは機能しません。 – Simons0n

0

私はそのリストを知らないが、onDropのようなものがあるはずです。このイベントハンドラに関数を渡して、リストの並べ替えを開始すると、渡している可能性があります。

このリストはありますか?

https://www.npmjs.com/package/react-native-sortable-list

私はonReleaseRowイベントハンドラが何をしようとするだろう。多分何か:

<SortableList onReleaseRow{() => this.sortList() data={this.state.data}}/> 

sortList() { 
let sortedData = //sort data somehow 
this.setState({ 
    data: sortedData}) 
} 
0

はあなたのソート可能なリストにダウンreRender関数を渡すことができます。 ReactNativeListは、行の順序が変更されるたびに呼び出されるonChangeOrderという名前の小道具を受け入れます。

class ParentComponent extends Component { 
    reRender =() => { 
     this.forceUpdate() 
    } 

    render() { 
     return <ReactNativeList onChangeOrder={this.reRender} /> 
    } 
} 
0

私は次のように再レンダリングする方法を見つけました。私がやっている何

<SortableListView 
     key={this.state.count} 
     data={this.state.allObj} 
     order={this.state.order} 
     activeOpacity={0.5} 
     onRowMoved={e => { 
     this.setState({ count: this.state.count + 1 }); 
     this.props.arrangedMilestoneList(e); 
     console.log('onRowMoved is called'); 
     }} 
     onMoveEnd={() => console.log('onMoveEnd is fired')} 
     renderRow={(row, s1, i) => this.renderOneDraggableMilestone(row, s1, i)} 
    /> 

は、私がSortableListViewにキー属性を追加し、各onRowMovedアクションにこのキーを更新しています。これにより、再レンダリングが発生します。

関連する問題