gpt4 book ai didi

javascript - mobX - 过滤 react native 的国家?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:01:10 24 4
gpt4 key购买 nike

我有一个包含 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 中执行此操作的正确方法是什么?

最佳答案

我看到了一些可能的问题,所以我稍微改变了方法。

工作示例

已更新 Working example .请注意,这在 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();
}
}

React-native gotchyas

使用onChangeText正确签名

jsx:

    <input placeholder="Start typing country"
onKeyUp={this.onChangeFilterTerm} />

js:

    @action onChangeFilterTerm = value => {
this.filterTermValue = value.toLowerCase();
}

使用mobx-react/native

如果还是不行,我会仔细检查一下:

不要:

import {observer} from 'mobx-react';

做:

import {observer} from 'mobx-react/native';

关于javascript - mobX - 过滤 react native 的国家?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37865454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com