Прежде всего, я понимаю, что есть пара подобных вопросов, но ни один из ответов не помог.response-native: перерисовать строки в ListView при изменении состояния
В любом случае, у меня есть простой вид списка, и когда я нажимаю на определенную строку, я хочу добавить к ней несколько разных стилей и контента.
В _pressRow
я установил state.selected_row
и это вновь делает вид, в _renderRow
определено, что выбрана строка и стиль применяется надлежащим образом, но по какой-то причине _renderRow
только называется на начальной визуализации, как можно сделать его обновлять каждый раз, и почему это уже не происходит?
var List = React.createClass({
getInitialState: function() {
var ds = new React.ListView.DataSource({
rowHasChanged: (r1, r2) => r1 !== r2
});
return {
dataSource: ds.cloneWithRows(some_data),
loaded: false,
selected_row: null,
}
},
_renderRow: function(rowData, sectionID, rowID) {
var selected = (this.state.selected_row == rowID)
return (
<React.View
style={selected ? styles.row_expanded : row_styles.row}
onPress={() => this._pressRow(rowID)>
</React.View>
)
},
_pressRow: function(rowId){
this.setState({
selected_row: rowId,
});
},
render: function() {
return <React.View>
<React.ListView
dataSource={this.state.dataSource}
renderRow={this._renderRow}
style={styles.container}
/>
</React.View>
}
});
Привет, можете ли вы сделать JS Fiddle для решения проблемы. Я застрял в одной и той же вещи –
@PrateekRathore JS Fiddle не поможет, это конкретная проблема React Native, и вы не можете запустить родную среду на js скрипке. В чем конкретно проблема? Решение здесь было довольно простым в любом случае, вам просто нужно скопировать старый источник данных в совершенно новый объект, прежде чем дать его 'cloneWithRows' – AllTheTime
Спасибо, ваши решения кажутся жизнеспособными. Сначала попробуй. –