我正在学习如何应对,我整天都在试图找到解决问题的办法,但都没有成功。然后决定在这里提出我的第一个问题。
我有子组件,包括React-Datepicker组件和单独的“第二天”和“前一天”按钮来更改选定的日期。
SelectedDate存储在父组件的状态中。
我试图从子组件更新父组件的状态,当状态更新时,子组件应该重新呈现,因为该状态作为道具传递给同一个子组件。
我已设法从child更改父状态,但子组件未重新呈现,因此日期选择器日期未更新。
我应该如何解决这个问题?
下面是我没有导入行的代码。
// App.js
function App() {
const [selectedDate, setSelectedDate] = useState(new Date())
const incrementDate = () => {
let next = selectedDate
next.setDate(next.getDate() + 1)
setSelectedDate(next)
}
const decrementDate = () => {
let previous = selectedDate
previous.setDate(previous.getDate() - 1)
setSelectedDate(previous)
}
return (
<div className="App">
<Child
selectedDate={selectedDate}
setSelectedDate={setSelectedDate}
decrementDate={decrementDate}
incrementDate={incrementDate} />
</div>
)
}
// Child.js
const Child = ({ selectedDate, setSelectedDate, decrementDate, incrementDate }) => {
return (
<div className='datepicker-wrapper'>
<ArrowLeft className='date-arrow' onClick={decrementDate} />
<DatePicker
selected={selectedDate}
onChange={(date) => setSelectedDate(date)}
/>
<ArrowRight className='date-arrow' onClick={incrementDate} />
</div>
)
}
解决方案:
增量和减量功能已更改:
let next = new Date(selectedDate.valueOf())
let previous = new Date(selectedDate.valueOf())
我也遇到了同样的问题,我用一个额外的函数来计算它,它从孩子那里获取值,然后用它更新状态,而且用console.log很容易跟踪它。您可以将其视为中间件。试试看:
function App() {
const [selectedDate, setSelectedDate] = useState(new Date())
const incrementDate = () => {
let next = selectedDate
next.setDate(next.getDate() + 1)
setSelectedDate(next)
}
const onDateChane = (date) => {
console.log(date)
setSelectedDate(date)
}
const decrementDate = () => {
let previous = selectedDate
previous.setDate(previous.getDate() - 1)
setSelectedDate(previous)
}
return (
<div className="App">
<Child
selectedDate={selectedDate}
setSelectedDate={setSelectedDate}
decrementDate={decrementDate}
incrementDate={incrementDate} />
</div>
)
}
子组件没有呈现,因为您忘记添加use效应钩子。
import React,{useEffect} from 'react'
const Child = ({ selectedDate, setSelectedDate, decrementDate, incrementDate }) => {
useEffect(()=>{},[selectedDate]);
return (
<div className='datepicker-wrapper'>
<ArrowLeft className='date-arrow' onClick={decrementDate} />
<DatePicker
selected={selectedDate}
onChange={(date) => setSelectedDate(date)}
/>
<ArrowRight className='date-arrow' onClick={incrementDate} />
</div>
)
}
使用React更新状态时,应始终创建新的状态对象,而不仅仅是在原地修改现有状态。
const incrementDate = () => {
let next = new Date(selectedDate.valueOf())
next.setDate(next.getDate() + 1)
setSelectedDate(next)
}
const decrementDate = () => {
let previous = new Date(selectedDate.valueOf())
previous.setDate(previous.getDate() - 1)
setSelectedDate(previous)
}
使用React有各种优化,以便子组件仅在状态更改时重新呈现。许多javascript方法,如Date.setDate()
,会使原始对象发生变异。简单地用让以前的=selectedDate
分配一个新名称不会创建一个新的Date对象。要创建一个新的Date,您必须在updater函数中的某个地方使用new Date()
。
假设我的父组件有两个子组件: 我从Child2获得一个输入,并将其传递给父组件(到目前为止,我知道该怎么做)。但是,我需要将该输入传递给Child1,以更新它的状态。 我怎么能那么做?
问题内容: 假设我的父组件有两个子组件: 我从Child2获得输入,并将其传递给Parent组件(直到现在,我知道该怎么做)。但是然后我需要将该输入传递给Child1以更新其状态。 我怎样才能做到这一点? 问题答案: 希望您能得到主要想法-在Parent组件中创建一个函数,该函数将更改传递给Child1的值。ReactJS:为什么将组件的初始状态传递为prop是反模式?
这个问题在这里已经得到了回答,但事情总是在变化。 基本上,父组件获取一些数据,子组件需要这些数据。 这是子组件。
我是reactjs的新手,我不知道如何从父组件中更改子组件的状态。下面是代码 每当对父组件中的执行时,我希望子组件接收。 有什么建议吗?
我对react还比较陌生,我一直在分解一个web应用程序,并用react组件替换部分。我现在正在开发一个组件,其中包含我创建的几个不同组件。 在新组件中,我在componentDidMount函数中进行API调用,并创建子组件。乍一看,一切看起来都很完美,但当我们在其中一个子组件中进行状态更改,然后在父组件中进行更改时,子组件将其状态重置为更改之前的状态。 我知道发生了什么,州政府没有被传递给家长
问题内容: 我正在尝试制作一个不错的ApiWrapper组件,以填充各种子组件中的数据。从我阅读的所有内容来看,这应该可以正常工作:https : //jsfiddle.net/vinniejames/m1mesp6z/1/ 但是由于某种原因,当父状态更改时,子组件似乎没有更新。 我在这里想念什么吗? 问题答案: 您的代码有两个问题。 您的子组件的初始状态是通过props设置的。 引用此SO答案: