gpt4 book ai didi

javascript - 单击时 react 更新状态

转载 作者:搜寻专家 更新时间:2023-11-01 05:29:16 26 4
gpt4 key购买 nike

我有一个小组件,它列出了如下所示的数据结构。我想要做的是,当我点击 update 按钮时,我想增加 vote 键,但是,我没有找到正确的方法。我需要更新整个 data 状态吗?我对此没有什么困惑。

let MOCKDATA = [
{
id: 1,
name: 'Test 1',
vote: 0
},
{
id: 2,
name: 'Test 2',
vote: 2
}];

LinkListPage.js

import React from 'react';
// import LinksData from '../LinksData';
import Links from './Links';
// import update from 'react-addons-update';

//localStorage.setItem('linksData', JSON.stringify(LinksData));

let MOCKDATA = [
{
id: 1,
name: 'Test 1',
vote: 0
},
{
id: 2,
name: 'Test 2',
vote: 2
}];



class LinkListPage extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
data: MOCKDATA
};

this.update = this.update.bind(this);

}

componentDidMount() {
}

update() {
// this.setState({
// data:
// })

}

render() {

let list = this.state.data.map( links => {
return <Links key={links.id} update={this.update} data={links} />;
});

return (
<div>
<ul>{list}</ul>
{console.log(this.state.data)}
</div>
);
}

}

export default LinkListPage;

LinksPage.js

import React, {PropTypes} from 'react';

const Links = (props) => {
return (
<li>
<p>{props.data.name}</p>
<p>{props.data.vote}</p>
<button onClick={props.update}>Up</button>
</li>
);
};

Links.propTypes = {
data: PropTypes.object,
name: PropTypes.string,
vote: PropTypes.number,
update: PropTypes.func
};

export default Links;

HomePage.js

import React from 'react';
import LinkListPage from '../containers/LinkListPage';

const HomePage = () => {
return (
<div>
<LinkListPage />
</div>
);
};

export default HomePage;

阅读答案后,我的最终结果如下,效果很好。无论如何谢谢。

LinksPage.js

const Links = (props) => {
return (
<li>
<p>{props.data.name}</p>
<p>{props.data.vote}</p>
<button onClick={() => props.update(props.data.id)}>Up</button>
</li>
);
};

LinkListPage.js

update(id) {
const findId = LinksData.filter(item => {
item.id === id ? item.vote++ : false;
});

const data = Object.assign(...findId, LinksData);


this.state.data.sort((a, b) => {
return b.vote - a.vote;
});
//localStorage.setItem('linksData', JSON.stringify(this.state.data));

this.setState({data});

}

最佳答案

在这种情况下,我会将 onClick 处理程序添加到 LinksPage 组件。

class Links extends React.Component {

constructor(props) {
super(props);
this.onClick = this.onClick.bind(this);
}

onClick(e) {
// here you know which component is that, so you can call parent method
this.props.update(this.props.data.id);
}

render() {
return (
<li>
<p>{this.props.data.name}</p>
<p>{this.props.data.vote}</p>
<button onClick={this.onClick}>Up</button>
</li>
);
}
};

并更改您的更新函数:

class LinkListPage extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
data: MOCKDATA
};
this.update = this.update.bind(this);
}

update(itemId) {
// TODO: find and update your item, you can do it since you have an 'id'
const data = [...];
this.setState({
data,
});
}
}

关于javascript - 单击时 react 更新状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37828867/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com