昨天提到,Props不能從內部改變,但是可以從外面改變,到底是甚麼意思呢?
下面的程式碼是一個「傳來的props的值是一個state」的範例,我們先一眼掠過就好!
也可以參考codepen連結
function Hello(props) {
return(
<div>
<h1>嗨,{props.name}</h1>
<p>(值從props來,固定不動,輸入的)</p>
</div>
)
}
function Accept(props) {
return(
<div>
<h1>你現在有,{props.number}元</h1>
<p>(接收的值是一樣從props傳來來,但這個props的值本身是一個state)</p>
</div>
)
}
class App extends React.Component {
constructor() {
super();
this.state = {
add:100
}
this.addMoney = this.addMoney.bind(this);
}
addMoney() {
this.setState({
add: this.state.add + 100
})
}
render() {
return (
<div>
<Hello name='andy'/>
<Accept number={this.state.add}/>
<p onClick={this.addMoney}>更多錢</p>
</div>
)
}
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
<App/>,
);
並且會呈現以下的效果(當我按下更多錢的時候,500會變成600)
嗨,andy
(值從props來,固定不動,輸入的)
你現在有,500元
(接收的值是一樣從props傳來來,但這個props的值本身是一個state)
更多錢
我們逐步來觀看
component
,一個叫做Hello,我打算拿它來呈現不需要改變的資料;一個是Accept,要拿來呈現會被改變的資料。到目前為止,除了文字的敘述不同以外,component
的內容基本上是相同的。function Hello(props) {
return(
<div>
<h1>嗨,{props.name}</h1>
<p>(值從props來,固定不動,輸入的)</p>
</div>
)
}
function Accept(props) {
return(
<div>
<h1>你現在有,{props.number}元</h1>
<p>(接收的值是一樣從props傳來來,但這個props的值本身是一個state)</p>
</div>
)
}
component
render到畫面上吧。 render() {
return (
<div>
<Hello name='andy'/>
<Accept number={this.state.add}/>
<p onClick={this.addMoney}>更多錢</p>
</div>
)
}
constructor
幫state設了一個add=100的值,並且綁了this.addMoney
constructor() {
super();
this.state = {
add:100
}
this.addMoney = this.addMoney.bind(this);
}
setState
把add加上100 addMoney() {
this.setState({
add: this.state.add + 100
})
}
addMoney()
這個方法的時候,this.state.add
就會加上100,並且把整個this.state.add傳到Accept裡面。於是乎,成功修改了Props!
參考資料
https://zh-hant.reactjs.org/docs/react-component.html
https://segmentfault.com/a/1190000016376897
https://ithelp.ithome.com.tw/articles/10223754