I’m trying to build a search bar using hooks but the props that I pass into my functional component gives me error and the output is never loaded. I pass the opt props from options.js to Filter.js. Here’s the code: Options.js
import Filter from './Filter'
import Option from './Option'
export default (props) => {
return (
<div>
<button onClick={props.handleDeleteOptions}>Remove All</button>
{props.options.length === 0 && <p>Please add option to get Started!</p>}
{
props.options.map((x) => <Option key={x} optionText={x}
handleDeleteOption={props.handleDeleteOption}
/>)
}
<Filter opt={props.options} />
</div>
);
}
Filter.js
export default (props) => {
const [option, setOption] = React.useState(props);
const [search, setSearch] = React.useState("");
return (
<div>
<input
onChange={e => {
const test = props.opt.filter(o => {
return o.toLowerCase().includes(e.target.value.toLowerCase());
});
console.log("Option: ", test);
setOption(test);
setSearch(e.target.value);
}}
type="text"
value={search}
/>
{props.opt.map(o => (
<p key={o}>{o}</p>
))}
</div>
)
};
Advertisement
Answer
In you Filter.js you are mapping directly the props.opt. This doesn’t change when you do the filter. What changes is the state. There are two things you need to change for this to work:
- Fix default
optionstate:const [option, setOption] = React.useState(props.opt); - Fix the options map. Instead of
props.opt, useoptionfrom the state.