【发布时间】:2020-01-07 18:34:35
【问题描述】:
我正在开发 React SPA 并尝试使用过滤器呈现 JSON 数据。我有几个容器,每个容器都有一个类值。单击容器时,我试图将值传递给 setState。但是,当退出地图功能时,我无法更新新的状态更改。
我假设渲染状态没有得到更新。
import React, { Component } from "react";
import ListData from "../data/list.json";
class Levels extends Component {
constructor(props) {
super(props);
this.state = { newFilter: "" };
this.onClick = this.setFilter.bind(this);
}
setFilter = e => {
console.log(e); //This returns the correct class.
this.setState({ newFilter: e }); //This will not update
};
render() {
console.log(this.state.newFilter); //This just returns the initial state of ''
const activeTab = this.props.keyNumber;
let levelFilter = ListData.filter(i => {
return i.level === activeTab;
});
let renderLevel = levelFilter.map((detail, i) => {
let short_desc;
if ((detail.short || []).length === 0) {
short_desc = "";
} else {
short_desc = <p>{detail.short}</p>;
}
return (
<div
className={`kr_sItem ${detail.class}`}
data-value={detail.class}
onClick={() => this.onClick(detail.class)}
value={detail.class}
key={i}
>
<h1>{detail.title}</h1>
{short_desc}
<img src={`${detail.img}`} />
</div>
);
});
console.log(this.state.newFilter);
return (
<div id="kr_app_wrapper">
<div id="lOneWrapper">{renderLevel}</div>
<div id="lTwoWrapper"></div>
</div>
);
}
}
export default Levels;
这是组件中调用的代码:
import React, {Component} from 'react';
import Levels from './components/levels2';
import {
Route,
NavLink,
HashRouter
} from "react-router-dom";
import LevelTwo from "./levelTwo";
class LevelOne extends Component{
render(){
return(
<div id="lOneWrapper">
<NavLink to='/Level2'><Levels keyNumber={1} /></NavLink>
</div>
)
}
}
export default LevelOne;
【问题讨论】:
-
目前还不清楚是什么问题。您正在记录
this.props.newFilter这是一个永远不会设置的道具!?但是您还记录了this.state.newFilter,它应该在渲染中正确更新。 -
感谢您的收获。我将上面的内容更新为 state 而不是 props。在我沮丧的某个地方,我更新了尝试不同的方式,但忘记将 console.log 切换回来。
-
虽然你已经更新了代码,但问题描述仍然不清楚问题是什么?
-
我会更新的。我有根据 JSON 文件中的数据加载的 Div。他们每个人都有一个我想作为过滤器传递的类。当我单击 div 时,该类传递给 setFilter 函数,但不会在我的渲染中更新。我正在尝试传递一个变量以根据选择过滤掉结果。
标签: javascript reactjs