未知道具图案
Unknown props pattern
在下面的代码中,有一种我以前从未见过的编写反应组件的方式,我找不到任何解释。这是我挣扎的下面的片段。
const Reservations = ({
clearReservations,
handleSubmit,
machine,
saveReservations,
}) => (
我这是在传递道具吗?
什么是 handleSubmit?没有任何定义。跟redux-form有关系吗?
import React from 'react';
import { connect } from 'react-redux';
import { reduxForm, FieldArray, Form } from 'redux-form';
import { Button, Container, Row, Col } from 'reactstrap';
import _map from 'lodash/map';
import ReactJson from 'react-json-view';
import { WEEK_DAYS } from '../common/constants';
import {
clearReservations,
saveReservations,
} from '../actions/machine';
import SingleDayReservations from './SingleDayReservations';
import './Reservations.scss';
const validate = values => {
const errors = {
// monday: [{ start: 'must be present' }],
//tuesday: { _error: 'error' },
};
return errors;
};
const Reservations = ({
clearReservations,
handleSubmit,
machine,
saveReservations,
}) => (
<Container className="reservations">
<Form onSubmit={handleSubmit(saveReservations)}>
<Row>
<Col xs={8}>
<h2>Reservations</h2>
{_map(WEEK_DAYS, day => (
<FieldArray
key={`single-${day}`}
component={SingleDayReservations}
name={day}
/>
))}
<Button color="primary" type="submit">
Save data
</Button>
</Col>
<Col xs={4}>
<ReactJson src={machine} name="machineStoreState" />
<Button
onClick={clearReservations}
color="warning"
className="reservations__clear-btn"
>
Reset Data
</Button>
</Col>
</Row>
</Form>
</Container>
);
const mapStateToProps = state => ({
machine: state.machine,
initialValues: state.machine,
});
const mapDispatchToProps = {
clearReservations,
saveReservations,
};
export default connect(
mapStateToProps,
mapDispatchToProps,
)(
reduxForm({
form: 'reservations',
validate,
enableReinitialize: true,
})(Reservations),
);
handleSubmit 来自 redux-form
您没有将 props
传递给组件,而是使用解构并仅取出您真正需要的那些东西。
和写
一样
const Reservations = (props) => ....
{ clearReservations,
handleSubmit,
machine,
saveReservations } = props
You can find more about it here
希望对您有所帮助!
在功能组件中,传递的第一个参数是props
,您引用的行也可以写成下面的方式。
const Reservations = (props) => {
const { clearReservations, handleSubmit, machine, saveReservations } = props; // <- Object Destructuring
}
他们在这里做的是在 ES6 中引入的叫做 Object Destructuring
的东西。
您可以在此处阅读更多相关信息 ES6 In Depth: Destructuring
这只是destructuring
,举个例子:
let someObject = {
a: 1,
b: 2,
c: 3,
};
const destruct = ({ a, b, c }) => {
console.log(a, b, c);
}
destruct(someObject);
因此,您 "destruct" 一些对象并从该对象获取所需的属性。
在下面的代码中,有一种我以前从未见过的编写反应组件的方式,我找不到任何解释。这是我挣扎的下面的片段。
const Reservations = ({
clearReservations,
handleSubmit,
machine,
saveReservations,
}) => (
我这是在传递道具吗? 什么是 handleSubmit?没有任何定义。跟redux-form有关系吗?
import React from 'react';
import { connect } from 'react-redux';
import { reduxForm, FieldArray, Form } from 'redux-form';
import { Button, Container, Row, Col } from 'reactstrap';
import _map from 'lodash/map';
import ReactJson from 'react-json-view';
import { WEEK_DAYS } from '../common/constants';
import {
clearReservations,
saveReservations,
} from '../actions/machine';
import SingleDayReservations from './SingleDayReservations';
import './Reservations.scss';
const validate = values => {
const errors = {
// monday: [{ start: 'must be present' }],
//tuesday: { _error: 'error' },
};
return errors;
};
const Reservations = ({
clearReservations,
handleSubmit,
machine,
saveReservations,
}) => (
<Container className="reservations">
<Form onSubmit={handleSubmit(saveReservations)}>
<Row>
<Col xs={8}>
<h2>Reservations</h2>
{_map(WEEK_DAYS, day => (
<FieldArray
key={`single-${day}`}
component={SingleDayReservations}
name={day}
/>
))}
<Button color="primary" type="submit">
Save data
</Button>
</Col>
<Col xs={4}>
<ReactJson src={machine} name="machineStoreState" />
<Button
onClick={clearReservations}
color="warning"
className="reservations__clear-btn"
>
Reset Data
</Button>
</Col>
</Row>
</Form>
</Container>
);
const mapStateToProps = state => ({
machine: state.machine,
initialValues: state.machine,
});
const mapDispatchToProps = {
clearReservations,
saveReservations,
};
export default connect(
mapStateToProps,
mapDispatchToProps,
)(
reduxForm({
form: 'reservations',
validate,
enableReinitialize: true,
})(Reservations),
);
handleSubmit 来自 redux-form
您没有将 props
传递给组件,而是使用解构并仅取出您真正需要的那些东西。
和写
一样const Reservations = (props) => ....
{ clearReservations,
handleSubmit,
machine,
saveReservations } = props
You can find more about it here
希望对您有所帮助!
在功能组件中,传递的第一个参数是props
,您引用的行也可以写成下面的方式。
const Reservations = (props) => {
const { clearReservations, handleSubmit, machine, saveReservations } = props; // <- Object Destructuring
}
他们在这里做的是在 ES6 中引入的叫做 Object Destructuring
的东西。
您可以在此处阅读更多相关信息 ES6 In Depth: Destructuring
这只是destructuring
,举个例子:
let someObject = {
a: 1,
b: 2,
c: 3,
};
const destruct = ({ a, b, c }) => {
console.log(a, b, c);
}
destruct(someObject);
因此,您 "destruct" 一些对象并从该对象获取所需的属性。