【发布时间】:2020-10-29 13:56:11
【问题描述】:
我能够过滤掉不属于的数据,但是当用户删除他们输入的内容时,被过滤掉的数据不会回来。带回数组的过滤值的最佳做法是什么?
import React, { useReducer } from "react";
import "./styles.css";
const USER_UPDATE = "USER_UPDATE";
const ADD_USER = "ADD_USER";
const REMOVE_USER = "REMOVE_USER";
const FILTER_USER = "FILTER_USER";
const initState = { users: [], user: "" };
const reducer = (state, action) => {
switch (action.type) {
case FILTER_USER:
return {
...state,
users: state.users.filter(
user =>
user.toLowerCase().indexOf(action.payload.toLowerCase()) !== -1
)
};
default:
return state;
}
};
export default function App() {
const [state, dispatch] = useReducer(reducer, initState);
const userUpdate = e => {
const { value } = e.target;
dispatch({ type: USER_UPDATE, payload: value });
};
const addNewUser = () => dispatch({ type: ADD_USER });
const removeUser = i => dispatch({ type: REMOVE_USER, payload: i });
const handleFilter = e =>
dispatch({ type: FILTER_USER, payload: e.target.value });
const renderUsers = state.users.map((user, i) => (
<li
key={i}
>
<button
onClick={() => removeUser(i)}
>
x
</button>
<p style={{}}>{user}</p>
</li>
));
return (
<div className="App">
<pre>{state.user}</pre>
<input placeholder="Enter a name" onChange={userUpdate} />
<button onClick={addNewUser}>Add</button>
<hr />
<input placeholder="Filter name" onChange={handleFilter} />
<ul style={{ listStyle: "none" }}>{renderUsers}</ul>
</div>
);
}
e 带回被过滤掉的原始数据?
【问题讨论】:
标签: javascript arrays reactjs react-hooks reducers