- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在通过 connect 和 redux-form 一起使用 ref
时遇到问题。
组件的结构是 ChildComponent 有 Forms 而我正在使用
class EditEvent extends Component {
constructor (props) {
super(props);
this.handleStartDateChange = this.handleStartDateChange.bind(this);
this.handleEndDataChange = this.handleEndDataChange.bind(this);
this.state = {loading: false};
}
componentDidMount(){
this.props.fetchEvent(this.props.session,true);
this.props.fetchScheduleDates(this.props.session);
}
submitSettings(){
this.props.form.submit();
}
handleStartDateChange(date) {
this.props.updateUnsavedChanges();
this.props.dateRangeUpdate({startDate:date,endDate:date,allDate:{}});
}
handleEndDataChange(date) {
this.props.updateUnsavedChanges();
this.props.dateRangeUpdate({startDate:this.props.scheduledates.startDate,endDate:date,allDate:{}});
}
renderBlockList(startDate,endDate,allDate){
/*if(isEmpty(allDate)){
return 'Please select date duration first.';
}*/
var arr = [];
var day = {};
var n = endDate.diff(startDate,'days')+1;
for (var i=1; i <= n; i++ ) {
if(i !== 1){
day = moment(day).add(1,'days');
} else {
day = startDate;
}
var activeDate = _.find(allDate, {scheduledate:moment(day).format('YYYY-MM-DD')});
arr.push(<DateBlock key={i} day={day} activeDate={activeDate}/>);
}
return arr;
}
handleEventName(){
this.props.updateUnsavedChanges();
}
handleEventDesc(){
this.props.updateUnsavedChanges();
}
onFormSubmit(values){
debugger;
if (this.props.selectedFeatures.length === 0) {
this.props.showError('Select at least one feature!');
} else if (values.eventname === '') {
this.props.showError('Please enter a name');
} else {
this.props.submitSettingsHandler(values);
}
}
render(){
var eventStartDate = moment();
var eventEndDate = moment().add(6,'days');
var isDisabled = false;
var allDate = [];
if(this.props.scheduledates.startDate !== undefined){
eventStartDate = this.props.scheduledates.startDate;
eventEndDate = this.props.scheduledates.endDate;
allDate = this.props.allDate;
}
if(this.props.scheduledates.isEditable !== undefined){
isDisabled = true;
}
var {handleSubmit, pristine, submitting, invalid} = this.props;
return(
<form onSubmit={handleSubmit(this.onFormSubmit.bind(this))} encType="multipart/form-data">
<div className="general-tab-warp">
<Field
name="eventname"
label="Event name"
placeholder="E.g google I/O 2017"
type="text"
component={this.renderFieldText}
bsClass="row"
formdiv="false"
labelposition={LABEL_POSITION_TOP}
onChange={this.handleEventName.bind(this)}
/>
<Field
name="eventdesc"
label="Event Description"
placeholder="Enter event description"
type="text"
component={this.renderFieldTextarea}
bsClass="row"
formdiv="false"
labelposition={LABEL_POSITION_TOP}
onChange={this.handleEventDesc.bind(this)}
/>
<div className="form-group row">
<label className="control-label-top col-sm-12">Duration*</label>
<div className="col-sm-12">
<Row>
<Col md={6} style={{width:'48%'}}>
<DatePicker
selected = {eventStartDate}
className = "form-control"
dateFormat = "DD/MM/YYYY"
onChange = {this.handleStartDateChange}
name = "startdate"
selectsStart
startDate = {eventStartDate}
endDate = {eventEndDate}
minDate = {moment().add(1,'days')}
disabled={isDisabled}
/>
</Col>
<Col md={1} style={{padding:'0px',marginTop:'6px', width:'4%'}}>➔</Col>
<Col md={6} style={{width:'48%'}}>
<DatePicker
selected = {eventEndDate}
className = "form-control"
dateFormat = "DD/MM/YYYY"
onChange = {this.handleEndDataChange}
name = "enddate"
minDate = {eventStartDate}
maxDate = {moment(eventStartDate).add(6, "days")}
selectsEnd
startDate = {eventStartDate}
endDate = {eventEndDate}
disabled={isDisabled}
/>
</Col>
</Row>
<div className="duration-info">
* You can't update the date after publishing the app.
</div>
</div>
</div>
<div className="form-group row">
<label className="control-label-top col-sm-12">Days</label>
<div className="col-sm-12">
<ul className="event-days">
{this.renderBlockList(eventStartDate,eventEndDate,allDate)}
</ul>
</div>
</div>
<div className="form-group row">
<label className="control-label-top col-sm-12">Event Privacy</label>
<div className="col-md-12">
<FormGroup>
<Radio name="event_privacy" inline>
Public
</Radio>{' '}
<Radio name="event_privacy" inline>
Private
</Radio>
</FormGroup>
</div>
</div>
</form>
);
}
}
function mapStateToProps(state){
return{
features: state.features,
session: state.session,
initialValues: state.eventData[0],
scheduledates:state.scheduledates,
allDate:state.updateScheduleDates,
selectedFeatures: state.selectedFeatures
};
}
function validate(values) {
var errors = {};
if (values['eventname'] === '') {
errors['eventname'] = 'Event name is required';
}
return errors;
}
export default connect(mapStateToProps,{fetchEvent,updateUnsavedChanges,fetchScheduleDates,dateRangeUpdate,patchEventDetails,showError,showSuccess},null,{withRef:true})(reduxForm({
validate,
form:'EditEventForm',
enableReinitialize: true,
keepDirtyOnReinitialize: true
})(EditEvent));
组件有一个功能
submitSettings(){
this.props.form.submit();
}
我想从我正在使用 ref 的父组件调用 submitSettings,见下文
constructor(props){
super(props);
this.editEventRef = React.createRef();
}
onSaveClick(){
this.editEventRef.current.submitSettings();
}
render(){
return(
<EditEvent ref={this.editEventRef}/>
)
}
当 onSaveClick 被调用时,我总是得到以下错误
Uncaught TypeError: this.editEventRef.current.submitSettings is not a function
当我更改以下行并删除 connect() 中
reduxForm()
的使用时,错误出现并且函数工作正常
export default
connect(mapStateToProps,
{fetchEventDetails}
,null,{withRef:true})(EditEvent);
谁能指导我解决这个问题?我错过了什么吗?
感谢您的帮助。
更新这些是我正在使用的软件包的 npm 版本,如果有帮助的话。
"react": "^16.7.0" "react-dom": "^16.7.0", "react-redux": "^5.1.1", "redux-form": "^6.7.0",
最佳答案
好的,所以在花了这么多时间之后我找到了解决方案,这适用于 "react": "^16.7.0" 和 "redux-form": "^8.1. 0" 这是目前最新的。
当你像我在问题中那样使用 connect() reduxForm()
时,你需要使用
this.editEventRef.current.wrappedInstance.submitSettings();
因此,只要子组件中有 reduxForm,您就需要使用 .current.wrappedInstance 来访问回调,否则仅使用 .current。
您需要使用 {forwardRef:true}
作为 connect() 中的选项
虽然我没有在任何地方找到它的文档,但上面的作品。
希望它能帮助寻找类似答案的人。
干杯。
关于javascript - ReactJS - ref 不适用于 connect 和 redux-form,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54306430/
我一直在尝试将 redux sagas 和 redux 工具包引入我的项目。我目前遇到的问题是 watcher saga 没有捕捉到 takeEvery 中的调度 Action 。效果并运行处理程序。
我需要使用 deep-freeze 库来深度卡住 react redux 应用程序中的整个 redux 状态,以检查状态是否有任何变化。我应该如何使用 deep-freeze 和 React redu
这是一个关于 Redux js 中状态的问题。我在该州有一个数组列表: { list: list } 根据 Redux 文档,我不应该修改 reducer 中的状态。我想在列表中添加一个新项目。我
我正在构建一个应用程序,在用户向下滚动时执行操作。如果我可以在用户再次向上滚动时撤消这些操作,基本上将滚动变成浏览操作时间线的一种方式,那就太好了。 Redux 中是否有内置的方法来做到这一点?或者我
从我从 Dan Abramov 的蛋头视频“javascript-redux-colocating-selectors-with-reducers”和他的一些推文中了解到,使用选择器将状态映射到 Pr
尝试使用 redux saga 运行 reduxdevtools: 收到此错误: Error Before running a Saga, you must mount the Saga middle
Redux 工具包文档提到在多个 reducer 中使用操作(或者更确切地说是操作类型) First, Redux action types are not meant to be exclusive
Redux 将调度状态更改的操作。 redux 中 Action 类型的命名约定是什么? 最佳答案 社区中有一些约定,我将在这里列出我知道并认为有用的约定: 最常见的约定是 将 Action 类型(“
使用 Redux Toolkit 可以吗,即使我只在其中创建 Slice 并通过 Redux Saga 解决中间件问题? 或者在这种情况下,最佳实践是使用 Redux Saga + raw Redux
Redux 如何处理深度嵌套的叶子模型变更?意思是,我正在从叶子一直发送到它的 reducer 句柄的更改事件,并且我不想将更改事件广播到整个树。 最佳答案 在 Redux 中,所有操作总是被分派(d
redux 使用什么类型的数据结构来使数据在 Angular 和 React.js 中持久化?我假设它使用持久数据结构。 最佳答案 Redux 是一种用于管理状态的架构。它不使用任何数据结构。它保留您
我们正在计划一个 Electron 应用程序,并且我们正在考虑 Redux。该应用程序将具有巨大 状态,可能会从数十个或数百个文件中读取数据。在做一些了解 Redux 的研究时,我发现 reducer
我不想添加属性 sections: []到我的对象 formOpen在 reducer 中,我收到我的对象 formOpen从我的服务器和其他属性,我想添加这个,我该怎么做? 谢谢 import {
我使用 redux-saga 的主要原因之一是它进行异步函数调用的可测试性。我的困境是,当我使用不属于我的 redux 存储的有状态对象进行编程时,使用 sagas 进行编程变得非常尴尬。是否有使用非
我是 redux 的新手,所以我有几个问题希望得到解答。如果您能解释一些有关构建 redux 架构的内容,那就太好了。 此时我使用 Flutter_Redux 包 ( https://pub.dart
我正在使用 React + Flux。我们的团队正计划从 flux 转向 redux。来自 Flux 世界的我对 Redux 感到非常困惑。在 flux 控制流中很简单,从组件 -> 操作 -> 存储
这个问题与过去不同,这就是为什么。这个问题是什么时候。由于两者本身都是很好的框架,所以问题是我什么时候应该使用 thunk 而不是 saga。因为我的一位 friend 一直坚持让我在我们的应用程序中
我搜索了高低,但找不到明确的答案。 我已经设法绕开 Redux 的机制,但是当我谈到 API 调用和异步操作创建者时,我被 Promises 上下文中的中间件所困。 你能帮我把乱七八糟的东西弄好吗?
我正在使用 redux-saga 但遇到了一个问题:redux-auth-wrapper 需要 redux-thunk进行重定向,所以我只是在我的商店中添加了 thunk: import {creat
问题(tl;博士) 我们如何创建 custom redux-orm reducer与 redux-toolkit的createSlice ? 有没有比这个问题中提供的尝试更简单、推荐、更优雅或只是其他
我是一名优秀的程序员,十分优秀!