javascript - 在 React 中状态改变时重新渲染组件

标签 javascript html reactjs

我有一个调用两个函数的应用;我的购物车和我的商品。我试图做到这一点,所以当调用 MyItems 中呈现的按钮时,它会调用主应用程序组件(父组件)内的方法并更改状态,但由于某种原因,它不会更改 MyCart 跨度中的值。

我下面的代码是我想做的,但它不起作用,我也不知道为什么。

class ShopRemake extends React.Component {
    constructor() {
        super();
        this.state = {
            total: 0
        }

        this.changeTotal = this.changeTotal.bind(this);
    }

    changeTotal() {
        this.setState(prevState => {total: ++prevState.total});
        console.log(this.state);
    }

    render() {
        return (
            <React.Fragment>
                <MyItem changeTotal={this.changeTotal}/>
                <MyCart total={this.state.total}/>
            </React.Fragment>
        );
    }
}

function MyItem(props) {
    return (
        <button onClick={props.changeTotal}> Click Me </button>
    );
}

function MyCart(props) {
    return (
        <span> Total Items: {props.total} </span>
    );
}

我希望它在我单击按钮后 MyCart 内的跨度相应地更新。

最佳答案

您必须将返回的对象文字包装在箭头函数的括号中。否则花括号将被视为表示函数的主体。以下作品:

p => ({ foo: 'bar' })

因此在 changeTotal 中调用 setState :

changeTotal() {
    this.setState(prevState => {total: ++prevState.total});
    console.log(this.state);
}

应替换为以下内容:

changeTotal() {
    this.setState(prevState => ({total: ++prevState.total}));
    console.log(this.state);
}

此外,setState 是异步的,您需要等待它(不推荐)或使用回调作为第二个参数来查看结果状态:

changeTotal() {
    this.setState(
        prevState => ({total: ++prevState.total}),
        () => { console.log(this.state) }
    );
}

编辑:

旁注,您代码中的以下 2 个组件可以简化为箭头函数以获得完全相同的结果,同时使它们更易于阅读:

const MyItem = ({ changeTotal }) => <button onClick={changeTotal}> Click Me </button>

const MyCart = ({ total }) => <span> Total Items: {total} </span>

您还可以将 changeTotal 转换为箭头函数,以避免在构造函数中绑定(bind)它

关于javascript - 在 React 中状态改变时重新渲染组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54554520/

相关文章:

javascript - 使用 Selenium 在 Python 中执行 JavaScript

html - 滚动条位于绝对位置之上

javascript - 使用 ReactJS 循环遍历 JSON 数组,但不了解代码的实际工作原理

javascript - 为什么 "chrome.bookmarks.getTree"不起作用?

javascript - Mongodb 并行运行数千个查询

javascript - NodeJs 和 ExpressJs 无法设置 Cookie

javascript - TypeError: Functionname 不是 HTMLButtonElement.onClick 中的函数

javascript - CSS3 - 有没有办法添加一些列过滤器?

css - 你如何有效地将 CSS 网格布局与 React 结合使用?

php - ReactJS:传输 Prop