React js не может назначить свойство только для чтения

#javascript #reactjs #react-props

#javascript #reactjs #react-props

Вопрос:

У меня есть два компонента: категория и содержимое категории.Категория является родительским компонентом.

 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
};
  

В компоненте category существует параметр pageSize.Мне нужно изменить это значение, когда я выбираю выпадающее значение в моем дочернем компоненте categorycomponents.Ниже приведен дочерний компонент

     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. Сначала поместите SelectedValue в состояние … во-вторых, покажите нам реализацию handlePageSize

Ответ №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)