#javascript
Вопрос:
У меня возникает TypeError: Cannot read property 'serviceCategory' of null
проблема, когда обновляется «связанная страница» (f5) или когда страница посещается как прямой трафик.
Я пробовал устанавливать значения по умолчанию, но это не срабатывает.
Вот моя текущая настройка:
<Link
to="/locations"
state={{
serviceCategory: "FILTER",
}}
>
связанная страница
const Locations = ({ location }) => {
const { state = {} } = location
const { serviceCategory } = state
const [category, setCategory] = useState(() => {
return location.state === null ? "ALL" : serviceCategory
})
}
...
Locations.defaultProps = {
location: {
state: {
serviceCategory: "ALL",
},
},
}
export default Locations
defaultProps
в документации Гэтсби нет места, поэтому я думаю о другом решении.
Ответ №1:
В defaultProps
этом случае это не сработает, потому что Гэтсби использует @reach/router
внутренне, и props.location
это переопределяет значение.
Вы можете либо использовать другое имя переменной внутри defaultProps
, либо использовать значение по умолчанию для состояния.
const state = location.state || { serviceCategory: 'ALL' }
Обратите внимание, что
const { state = {serviceCategory:'ALL'} } = location
не будет работать, потому что инициализатор по умолчанию при деструктуризации работает только для undefined
значений, а не null
для значений. И в этом случае ваше значение равно нулю.