开发者问题收集

React js无法分配给只读属性

2020-10-21
6323

我有两个组件:类别和类别内容。类别是父组件。

function handlePageSize(pageValue) {
    props.pageSize = pageValue;
    // React.cloneElement(element, pageSize = pageValue)
}
    return (
        <Fragment>
            <Meta name="description" content={metaDescription} />
            <CategoryContent
                categoryId={id}
                classes={classes}
                data={loading ? null : data}
                pageControl={pageControl}
                sortProps={sortProps}
                onSelectSize = {handlePageSize}
            />
        </Fragment>
    );
};

Category.propTypes = {
    classes: shape({
        gallery: string,
        root: string,
        title: string
    }),
    id: number,
    pageSize: number
};

Category.defaultProps = {
    id: 3,
    // TODO: This can be replaced by the value from `storeConfig when the PR,
    // https://github.com/magento/graphql-ce/pull/650, is released.
    pageSize: 8
};

在类别组件中存在 pageSize 属性。当我在子组件 categorycompontents 中选择下拉值时,我需要更改该值。以下是子组件

    let selectedValue = null;
    function onChangePageSize(event) {
        selectedValue = event.target.value
        onSelectSize(selectedValue);
    }
   <select id="lang" onChange={onChangePageSize} defaultValue={8} value={selectedValue}>
                            <option value="8">8</option>
                            <option value="16">16</option>
                            <option value="24">24</option>
                        </select>

当我选择该值时,出现错误“无法分配给只读属性”。还有其他方法可以做到这一点吗?当我选择下拉值时,我需要立即更改页面中显示的项目数。

1个回答

您无法更新 prop 的属性值(React props 是不可变的)。

您可以做的是:将 pageSize 置于某个状态并更新它。

这是一个例子:

// import useState hook
import { useState } from 'react';

// create a state
const [pageSize, setPageSize] = useState(8); // default value

// to update the value use `setPageSize(val)`
function handlePageSize(pageValue) {
   setPageSize(pageValue)
}

// to access the value, just use `pageSize`
console.log(pageSize)

Marik Ishtar
2020-10-21