私は、対応する1または0の "アクティブ"状態の名前のリストを含むjsonを取り、スイッチを使用して "アクティブ"状態を表すリストビューにそれらを表示する単純なアプリケーションを構築しようとしています。レスポンスネイティブのリストビュー内にあるスイッチの状態を変更するにはどうしたらいいですか?
私はチュートリアルを経て、この思い付いた:Iを
undefined is not a function (evaluating '_this.setState(value)')
:
import React, { Component } from 'react';
import {
AppRegistry,
Switch,
Text,
View,
ListView
} from 'react-native';
import data from './test-users.json';
// this contains:
// name: a string containing the name
// active: the state of the switch, either 1 or 0.
const Row = (props) => (
<View>
<Text>
{`${props.name}`}
</Text>
<Switch value={props.active == 1}
onValueChange={(value) => this.setState(value)} />
</View>
);
class ListViewTest extends React.Component {
constructor(props) {
super(props);
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
dataSource: ds.cloneWithRows(data),
};
}
render() {
return (
<ListView
dataSource={this.state.dataSource}
renderRow={(data) => <Row {...data} />}
/>
);
}
}
export default ListViewTest;
AppRegistry.registerComponent('ListViewTest',() => ListViewTest);
これは罰金表示しますが、私はスイッチをクリックしようとすると、私は次のエラーが述べてもらいます反応ネイティブの仕組みについての基本的なことを誤解していなければならないように感じるが、それが何であるかはわからない。 setStateは状態を変更する方法ではありませんか?私はあなたが探していると思う何
ありがとうございます。あなたが言っているのは理にかなっていますが、試した後にもう一度同様のエラーが表示されます:undefinedは関数ではありません( '_this.setState({active:value})')。それは私に何か他のものが間違っていると思うようになります。おそらく、そこからsetStateを呼び出すことはできませんか? – user1090729
あなたはそうです、ごめんなさい。私は答えを更新して、 "この文脈"を正しいものにする変更を加えました。イベントハンドラの内部では、この値がRowオブジェクトではなかったので、私が以前に持っていたことは間違っていました。さて、Rowにupdate関数をバインドすると、それがなります。試してみてください! – jaws
私はそれを修正すると確信していましたが、エラーはまだ同じです。私は質問を編集し、私の文法ミスを犯した場合には、私の現在のコードを(あなたの提案と共に)下に追加しました。私は、コンテキストバインディングがどのように働くかを頭に入れて苦労しています。 – user1090729