gpt4 book ai didi

javascript - React - 输入失去按键焦点

转载 作者:行者123 更新时间:2023-12-03 13:52:59 25 4
gpt4 key购买 nike

我的搜索输入组件遇到了一个奇怪的错误,它失去了对每个按键的关注,并且无法找出原因。

const App = () => {
let [characters, setCharacters] = useState([]);
let [filteredCharacters, setFilteredCharacters] = useState([]);
// more state
let [search, setSearch] = useState("");

useEffect(() => {
setIsLoading(true);
axios
.get(`https://swapi.co/api/people/?page=${pageNumber}`)
.then(res => {
console.log(res.data.results);
setCharacters(res.data.results);
setFilteredCharacters(res.data.results);
})
.catch(err => console.error(err))
.then(() => {
setIsLoading(false);
});
}, [pageNumber]);

function updatePage(e) {
// update page
}

function handleSearch(e) {
setSearch(e.target.value);
const filtered = characters.filter(character => {
if (character.name.toLocaleLowerCase().indexOf(e.target.value) !== -1) {
return character;
}
});
setFilteredCharacters(filtered);
}
function SearchBar() {
return (
<React.Fragment>
<StyledInput
type="text"
id="search"
value={search}
placeholder="Search by name..."
onChange={e => handleSearch(e)}
/>
</React.Fragment>
);
}

return (
<React.Fragment>
<GlobalStyles />
<div className="App">
<Heading>React Wars!</Heading>
<SearchBar />
<Pagination handleClick={updatePage} />
{!isLoading && Object.entries(filteredCharacters).length ? (
<CharacterList characters={filteredCharacters} />
) : (
<LoadingBar />
)}
</div>
</React.Fragment>
);
};

我还收到 Line 65:50: Expected to return a value at the end of arrow function array-callback-return for the characters.filter() 线所以我不知道这是否与此有关。

如果有帮助,可以在此处看到已部署的存在错误的应用程序 --> https://mundane-vacation.surge.sh

最佳答案

您遇到焦点问题,因为您的组件 SearchBar 是在 App 组件内声明的,并且在每次渲染时都会重新创建。您需要将 SearchBar 移出 App 或将 StyledInput 移至 SearchBar 的位置。如果您选择第一种方式,我建议您从 SearchBar 中删除 React.Fragment,因为它只有一个呈现的子项:

function SearchBar(props) {
return (
<StyledInput
type="text"
id="search"
value={props.value}
placeholder="Search by name..."
onChange={props.onChange}
/>
);
}

应用程序中:

<SearchBar onChange={handleSearch} value={search} />

要修复警告,您需要始终在 filter 函数内返回一个 bool 值。现在,如果字符未通过条件,您将不返回任何内容(即未定义)。因此,请像这样更改您的 filter 函数:

const filtered = characters.filter(character => {
return character.name.toLocaleLowerCase().indexOf(e.target.value) !== -1
});

关于javascript - React - 输入失去按键焦点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58778631/

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