Javascript 无法使用react redux对数据进行排序?
我试图对数据进行排序,并在用户单击下拉按钮后以排序后的形式显示数据。我想根据Javascript 无法使用react redux对数据进行排序?,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,我试图对数据进行排序,并在用户单击下拉按钮后以排序后的形式显示数据。我想根据资金即整数值对其进行排序。所以我在标签上添加了onClick,但它不起作用,为什么 home.js: import React, { Component } from 'react'; import { connect } from 'react-redux'; import { sortByFunded } from '../../store/actions/sortAction'; class Home exten
资金
即整数值对其进行排序。所以我在
标签上添加了onClick
,但它不起作用,为什么
home.js:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { sortByFunded } from '../../store/actions/sortAction';
class Home extends Component {
render() {
const { searchTermChanged, sortByFunded } = this.props;
return (
<div>
<div className="buttonContainer">
<div>
<button className="btn btn-primary mycustom dropdown-toggle mr-4" type="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">Sort by </button>
<div className="dropdown-menu">
<a className="dropdown-item" href="#">End time</a>
<a className="dropdown-item" href="#" onClick={sortByFunded}>Percentage fund</a>
<a className="dropdown-item" href="#">Number of backers</a>
</div>
</div>
</div>
</div>
)
}
}
const mapStateToProps = state => ({
projects: state.search.projects,
sort: state.sort.projects
})
export default connect(mapStateToProps, { searchTermChanged, sortByFunded })(Home);
import { SORT_BY_FUNDED } from './types';
export const sortByFunded = () => ({
type: SORT_BY_FUNDED
});
import { SORT_BY_FUNDED } from '../actions/types';
import Projects from '../../data/projects';
const initialState = {
projects: Projects
}
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
return {
...state,
projects: Projects ? Projects.sort((a, b) => a.funded - b.funded) : Projects
};
default:
return state;
}
}
sortReducer.js:
import React, { Component } from 'react';
import { connect } from 'react-redux';
import { sortByFunded } from '../../store/actions/sortAction';
class Home extends Component {
render() {
const { searchTermChanged, sortByFunded } = this.props;
return (
<div>
<div className="buttonContainer">
<div>
<button className="btn btn-primary mycustom dropdown-toggle mr-4" type="button" data-toggle="dropdown" aria-haspopup="true"
aria-expanded="false">Sort by </button>
<div className="dropdown-menu">
<a className="dropdown-item" href="#">End time</a>
<a className="dropdown-item" href="#" onClick={sortByFunded}>Percentage fund</a>
<a className="dropdown-item" href="#">Number of backers</a>
</div>
</div>
</div>
</div>
)
}
}
const mapStateToProps = state => ({
projects: state.search.projects,
sort: state.sort.projects
})
export default connect(mapStateToProps, { searchTermChanged, sortByFunded })(Home);
import { SORT_BY_FUNDED } from './types';
export const sortByFunded = () => ({
type: SORT_BY_FUNDED
});
import { SORT_BY_FUNDED } from '../actions/types';
import Projects from '../../data/projects';
const initialState = {
projects: Projects
}
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
return {
...state,
projects: Projects ? Projects.sort((a, b) => a.funded - b.funded) : Projects
};
default:
return state;
}
}
projects.js:
export default [
{
"s.no":0,
"amt.pledged":15823,
"blurb":"'Catalysts, Explorers & Secret Keepers: Women of Science Fiction' is a take-home exhibit & anthology by the Museum of Science Fiction.",
"by":"Museum of Science Fiction",
"country":"US",
"currency":"usd",
"endTime":"2016-11-01T23:59:00-04:00",
"location":"Washington, DC",
"funded":186,
"backers":"219382",
"state":"DC",
"title":"Catalysts, Explorers & Secret Keepers: Women of SF",
"type":"Town",
"url":"/projects/1608905146/catalysts-explorers-and-secret-keepers-women-of-sf?ref=discovery"
},
{
"s.no":1,
"amt.pledged":6859,
"blurb":"A unique handmade picture book for kids & art lovers about a nervous monster who finds his courage with the help of a brave little girl",
"by":"Tyrone Wells & Broken Eagle, LLC",
"country":"US",
"currency":"usd",
"endTime":"2016-11-25T01:13:33-05:00",
"location":"Portland, OR",
"funded":8,
"backers":"154926",
"state":"OR",
"title":"The Whatamagump (a hand-crafted story picture book)",
"type":"Town",
"url":"/projects/thewhatamagump/the-whatamagump-a-hand-crafted-story-picture-book?ref=discovery"
}, ..... ]
在我当前的实现中,我实际上并没有将项目存储在reducer中,而是在排序时总是从源代码中提取项目。也在变异它 工作代码: reducer.js:
import { SORT_BY_FUNDED } from '../actions/types';
import Projects from '../../data/projects';
const initialState = {
projects: Projects
}
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
return {
...state,
projects: state.projects.length > 0 ? [...state.projects.sort((a,b) => a.funded - b.funded)] : state.projects
};
default:
return state;
}
}
在我当前的实现中,我实际上并没有将项目存储在reducer中,而是在排序时总是从源代码中提取项目。也在变异它 工作代码: reducer.js:
import { SORT_BY_FUNDED } from '../actions/types';
import Projects from '../../data/projects';
const initialState = {
projects: Projects
}
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
return {
...state,
projects: state.projects.length > 0 ? [...state.projects.sort((a,b) => a.funded - b.funded)] : state.projects
};
default:
return state;
}
}
我认为你的减速机执行不正确。您可能需要检查
状态.project
是否存在,而不是导入的项目
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
let projects = state.projects ? state.projects : Projects;
return {
...state,
projects: projects.sort((a, b) => a.funded - b.funded)
};
default:
return state;
}
}
我认为你的减速机执行不正确。您可能需要检查
状态.project
是否存在,而不是导入的项目
export default function (state = initialState, action) {
switch (action.type) {
case SORT_BY_FUNDED:
let projects = state.projects ? state.projects : Projects;
return {
...state,
projects: projects.sort((a, b) => a.funded - b.funded)
};
default:
return state;
}
}
你能分享
项目的样本数据吗?
?FWIW,我会使用选择器(重新选择)进行排序,而不是在状态下对数据进行排序。我倾向于将状态视为原始数据存储,选择器将数据转换为显示状态。因此,将排序和项目都存储在状态中,然后在选择器中转换它们。导入某些内容(SortByFund)然后使用同名变量也不是一个好的做法。@KeithRousseau如果这不是一个好做法,请告诉我们在react redux中命名变量的好做法是什么。您可以共享任何指南或资源吗?基本上,您不希望发生冲突,否则您必须考虑变量名称的含义。只需使用import as来重命名import中的函数。您是否可以共享项目的示例数据?
?FWIW,我将使用选择器(重新选择)来进行排序,而不是在状态下对数据进行排序。我倾向于将状态视为原始数据存储,选择器将数据转换为显示状态。因此,将排序和项目都存储在状态中,然后在选择器中转换它们。导入某些内容(SortByFund)然后使用同名变量也不是一个好的做法。@KeithRousseau如果这不是一个好做法,请告诉我们在react redux中命名变量的好做法是什么。您可以共享任何指南或资源吗?基本上,您不希望发生冲突,否则您必须考虑变量名称的含义。只需使用import as来重命名import中的函数。