Я создал поисковый фильтр, используя реагировать на редукцию, но когда я набираю текст в поле поиска, список проектов не изменяется в зависимости от того, какое значение я ввожу в поисковой строке.Почему так ?Проекты должны быть отфильтрованы на основе результатов поиска, но это не работает, почему так?
Код:
home.js:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { searchTermChanged } from '../../store/actions/searchAction';
import projects from '../../data/projects';
class Home extends Component {
render() {
const { searchTermChanged } = this.props;
return (
<div>
<Navbar/>
<div className="header">
<div className="md-form mt-0 customsearch">
<input className="form-control" type="text" placeholder="Search projects" aria-label="Search"
value={this.props.searchTerm}
onChange={e => searchTermChanged(e.target.value)}
/>
</div>
<div class="container-fluid">
<div class="row">
{projects.map( (val,index) => (
<div class="col-3" key={index}>
<Card title={val.title} by={val.by} blurb={val.blurb} url={val.url} funded={val.funded} backers={val.backers} imgurl={index}/>
</div>
))}
</div>
</div>
</div>
)
}
}
const mapStateToProps = state => ({
search: state.search.searchTerm
})
export default connect (mapStateToProps, { searchTermChanged })(Home);
searchReducer.js:
import { SEARCH_INPUT_CHANGED } from '../actions/types';
import Projects from '../../data/projects';
const initialState = {
searchTerm: '',
projects: Projects
}
export default function (state = initialState, action) {
switch (action.type) {
case SEARCH_INPUT_CHANGED:
const { searchTerm } = action.payload;
return {
...state,
searchTerm: searchTerm,
projects: searchTerm
? Projects.filter(
projects =>
projects.name.toLowerCase().indexOf(searchTerm.toLowerCase()) >
-1,
)
: Projects,
};
default:
return state;
}
}
searchAction.js:
import { SEARCH_INPUT_CHANGED } from './types';
export const searchTermChanged = (searchTerm) => ({
type: SEARCH_INPUT_CHANGED,
payload: { searchTerm }
});
index.js:
import {combineReducers} from 'redux';
import searchReducer from './searchReducer';
export default combineReducers({
search: searchReducer
})
Снимок экрана: