Won*_*nka 3 javascript reactjs react-native mobx
我有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));
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我的全部逻辑,但我无法使其正常工作。唯一有效的方法是国家列表加载原始数组。一旦我开始输入内容,该值是不确定的,并且永远不会打印,并且列表也不会被过滤。我还尝试了async操作,runInAction甚至尝试了计算操作以返回过滤后的列表,但似乎无法使其正常工作。
在mobX中执行此操作的正确方法是什么?
我看到了一些可能的问题,所以我稍微改变了方法。
更新的 工作示例。请注意,这是未经测试的react-native,但应该可以使用。
@observer
class Country extends React.Component {
@observable filterTermValue = '';
@observable countriesList = [
{'slug': 'amsterdam', 'name': 'Amsterdam'},
{'slug': 'usa', 'name': 'United States'},
{'slug': 'vienna', 'name': 'Vienna'}
];
@computed get filtered() {
let filteredList = this.countriesList.filter(
t=>t.name.toLowerCase().indexOf(this.filterTermValue)>-1
);
if (filteredList.length)
return filteredList;
return this.countriesList;
}
render() {
return (
<div>
Term: <input placeholder="Start typing country"
onKeyUp={this.onChangeFilterTerm} />
{this.filtered.map(country =>
<div key={country.slug}>
<p>{country.name}</p>
</div>
)}
</div>
)
}
@action onChangeFilterTerm = value => {
this.filterTermValue = value.toLowerCase();
}
}
Run Code Online (Sandbox Code Playgroud)
使用onChangeText正确的签名
jsx:
<input placeholder="Start typing country"
onKeyUp={this.onChangeFilterTerm} />
Run Code Online (Sandbox Code Playgroud)
js:
@action onChangeFilterTerm = value => {
this.filterTermValue = value.toLowerCase();
}
Run Code Online (Sandbox Code Playgroud)
使用 mobx-react/native
如果仍然无法使用,我会再次检查:
别:
import {observer} from 'mobx-react';
Run Code Online (Sandbox Code Playgroud)
做:
import {observer} from 'mobx-react/native';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1420 次 |
| 最近记录: |