【发布时间】:2016-10-18 08:10:23
【问题描述】:
我有一个包含 3 个国家/地区的数组和一个用于过滤它们的文本输入。如果您输入文本输入,它应该检查您输入的国家名称,这应该返回与过滤文本匹配的新过滤国家列表。它还应该在Typed Text:旁边显示输入的文本
import React, { Component } from 'react'
import { View, Text, TextInput } from 'react-native'
import { observable, action } from 'mobx';
import { observer } from 'mobx-react/native'
@observer
export default class Country extends Component {
@observable filterTermValue;
@observable countriesList = [
{'slug': 'amsterdam', 'name': 'Amsterdam'},
{'slug': 'usa', 'name': 'United States'},
{'slug': 'vienna', 'name': 'Vienna'}
];
render() {
return (
<View>
<Text>Typed Text: {this.filterTermValue}</Text>
<TextInput placeholder="Start typing country"
value={this.filterTermValue}
onChange={this.onChangeFilterTerm} />
{this.countriesList.map(country =>
<View key={country.slug}>
<Text>{country.name}</Text>
</View>
)}
</View>
)
}
@action onChangeFilterTerm = (e) => {
this.filterTermValue = e.target.value;
this.countriesList.replace(this.countriesList.filter(el => el.name.toLowerCase().indexOf(this.filterTermValue.toLowerCase()) > -1));
}
}
这就是我拥有的所有逻辑,但我无法让它发挥作用。唯一有效的是国家列表加载原始数组。一旦我开始输入输入,该值是未定义的并且永远不会打印,并且列表永远不会被过滤。我还尝试了 async 操作和 runInAction 我什至尝试用计算返回过滤后的列表,但似乎无法让它工作。
在 mobX 中执行此操作的正确方法是什么?
【问题讨论】:
标签: javascript reactjs react-native mobx