РЕДАКТИРОВАТЬ: решение в конце
Итак, я получил данные из API и сохранил их в моем хранилище Redux. Это массив объектов, содержащий 100 объектов. На внешнем интерфейсе я показываю 4 ключа от каждого объекта.
Сейчас я пытаюсь сделать это на внешнем интерфейсе, выполнить поиск по ключу (имя или год) и отобразить результаты. В идеале это было бы что-то вроде ILIKE в PSQL, но даже результат был бы только тогда, когда e.target.value === obj.super.nested.key || obj.super.nested.key_two был бы поразительным.
Я пытался использовать select () из redux-saga / Effects безрезультатно.
Первоначально я попытался использовать onChange поля ввода для отправки действия наблюдателю сe.target.value в качестве параметра, который будет вызывать функцию, использующую это значение в качестве параметра для select ().
Код с PSQL вместо Sagag-приставки будет:
const [val, setVal] = useState("");
---------------------------------------------
useEffect(() => {
if (val.length >= 3) {
axios.get(`/searchCards/${val}.json`).then(results => {});
} else if (val.length <= 3) {
setCard("");
}
}, [val]);
---------------------------------------------
function handleChange(e) {
e.preventDefault();
setVal(e.target.value);
}
----------------------------------------------
<form noValidate onSubmit={e => this.submit(e)}>
<input
noValidate
name="searchValue"
placeholder="name"
onChange={e => handleChange(e)}
/>
<br />
<br />
<input onChange={e => handleChange(e)} type="date" />
</form>
node.js
app.get("/searchCards/:str.json", (req, res) => {
db.findCard(req.params.str)
.then(results => {
let result = results.rows[0].name;
res.json({ result });
})
.catch(err => {
console.log("error in searching for cards by name: ", err.message);
res.json(null);
});
});
exports.findCard = function findCard(str) {
return db.query(`SELECT * FROM cards WHERE name ILIKE $1 LIMIT 1`, [
str + "%"
]);
};
Как можно добиться того же с помощью redux-saga, поиска в хранилище по значению и возврата всего объекта, содержащего это значение?
РЕШЕНИЕ
Я нашел обходной путь, если кто-то хочет знать. Документация по redux-saga не очень богата, поэтому я сделал это только так, как знал.
По сути, когда компонент монтируется, я запрашиваю данные из API и сохраняю в хранилище redux. Как только он находится в магазине, я отображаю его на FE.
Так как при изменении поля ввода я хочу отображать только некоторые части ранее отображенных данных, я сделал троичный, который говорит, что еслизначение поля ввода существует / изменяется, отображается через хранилище и возвращается туда, где input value.toLowerCase (). startWithstartsWith (value_in_the_store), иначе возвращает все данные.
Работает как чудо.
Если у кого-то есть другая идея, я хотел бы услышать.