#javascript #reactjs #react-native #web #jsx
Вопрос:
То же, что и title! Почему нельзя получить значение состояния при передаче как (props), но можно при передаче ({props})?
Пример кода:
import React, { useState } from 'react'
const Header = (props) => {
return (
<div>
<h1>{props.text}</h1>
</div>
)
}
const Button = (props) => (
<button onClick={props.handleClick}>
{props.text}
</button>
)
const Statistic = props => ( <div><h2>{props.text}</h2></div>)
const Statistics = ({props}) =>{
const total = props.good props.neutral props.bad
console.log("total", total)
return(
<div></div>
)
}
const App = () => {
// save clicks of each button to its own state
const [clicks, setClicks] = useState({
good: 0, neutral: 0, bad: 0
})
const setClickToValue= newValue => {
setClicks(newValue)
}
return (
<div>
<Header text="Give feedback" />
<Button handleClick={ () => setClickToValue(clicks.good 1) } text="Good" />
<Button handleClick={ () => setClickToValue(clicks.neutral 1) } text="Neutral" />
<Button handleClick={ () => setClickToValue(clicks.bad 1) } text="Bad" />
<Statistic text="Statistics" />
<Statistics props={clicks} />
</div>
)
}
export default App
Я потерял час, чтобы выяснить, что передача как ({props}) была правильным способом. Но я все еще не понимаю, что происходит, может кто-нибудь любезно уточнить?
Спасибо, ребята!
Комментарии:
1. Когда вы используете «{props}», вы разрушаете объект, что означает, что аргумент имеет «props» как часть объекта, это означает, что вы могли бы заменить его. например, «аргументы» и получить доступ к значению следующим образом. «args.props.good»
2. Вы можете использовать
const Statistics = (props) =>{
, если хотите, но вам придется использоватьprops.props.good
вместоprops.good
, потому что вы передаетеclicks
объект в prop с именем prop3. Просто избегайте называть одно из ваших свойств «props» .
4. о, понятно, спасибо. я следил за некоторыми руководствами, и они сделали это так, что в сочетании с моим недостатком знаний это стало беспорядком
Ответ №1:
причина в том, что у вас есть prop call props . <Statistics props={clicks} />
итак, компонент son получает это как props
props = {
props: clicks
}
поэтому, когда вы используете его таким образом
const comp = props => {
props.good
}
он ломается или около того, потому что у реквизита есть только вызов prop props
то, что вам нужно сделать, это что-то вроде
<Statistics {...clicks} />
теперь в компоненте yow Statistics вы получите правильные реквизиты
const Statistics = props => {
console.log(props) // {good: 0, neutral: 0, bad: 0}
}
Ответ №2:
Это потому, что функциональный компонент react имеет аргумент по умолчанию, называемый props, который является объектом. Для доступа к объекту props мы можем получить доступ с помощью . или [] обозначения, например., props.name
и javascript также как функциональность, называемая уничтожением объекта предположим, у меня есть объект
let obj = {a:123,b:1243}
// i can directly access the object property by destructuring
let {a} = obj;
console.log(a)
//output 123
взгляните на деструктурирование —>