[英]How to merge passing prop and default prop in react?
In my simple create-react-app
在我简单的create-react-app
I have this incoming prop我有这个传入的道具
dummyConfig: {
prop_1: {
prop_1_1: "100",
prop_1_2: "100"
}
}
in my app's default prop, I have在我的应用程序的默认道具中,我有
dummyConfig: {
prop_1: {
prop_1_1: "prop_1_1",
prop_1_2: "prop_1_2"
},
prop_2: {
prop_2_1: "prop_2_1",
prop_2_2: "prop_2_2"
}
}
I want to have a final prop in App.js to become following, so I can use it.我想在 App.js 中有一个最终道具成为关注对象,以便我可以使用它。
final
dummyConfig: {
prop_1: {
prop_1_1: "100",
prop_1_2: "100"
},
prop_2: {
prop_2_1: "prop_2_1",
prop_2_2: "prop_2_2"
}
}
index.js索引.js
import React from "react";
import ReactDOM from "react-dom";
import "./index.css";
import App from "./App";
import * as serviceWorker from "./serviceWorker";
const dummyConfig = {
prop_1: {
prop_1_1: "100",
prop_1_2: "100"
}
};
ReactDOM.render(
<React.StrictMode>
<App
// sys
systemConfig={{ systemConfig: "systemConfig" }}
// app
applicationConfig={{ applicationConfig: "applicationConfig" }}
// dummy
dummyConfig={dummyConfig}
/>
</React.StrictMode>,
document.getElementById("root")
);
serviceWorker.unregister();
App.js应用程序.js
import React from "react";
import PropTypes from "prop-types";
function App(props) {
//test
console.log("props", props);
return <div className="App"></div>;
}
App.defaultProps = {
systemConfig: {},
applicationConfig: {},
dummyConfig: {
prop_1: {
prop_1_1: "prop_1_1",
prop_1_2: "prop_1_2"
},
prop_2: {
prop_2_1: "prop_2_1",
prop_2_2: "prop_2_2"
}
}
};
App.propTypes = {
systemConfig: PropTypes.object.isRequired,
applicationConfig: PropTypes.object.isRequired
};
export default App;
When I do console.log I only see.当我执行 console.log 时,我只能看到。 Any way to achieve with using prop and default prop?有什么办法可以通过使用 prop 和 default prop 来实现?
{
"systemConfig": {
"systemConfig": "systemConfig"
},
"applicationConfig": {
"applicationConfig": "applicationConfig"
},
"dummyConfig": {
"prop_1": {
"prop_1_1": "100",
"prop_1_2": "100"
}
}
}
Instead of giving App
a default props field of dummyConfig
, you can have a "default value" for dummyConfig
as a variable inside of your function.而不是给App
的默认道具场dummyConfig
,你可以有一个“默认值”为dummyConfig
作为函数的变量里面。
For example:例如:
function App(props) {
//test
const dummyConfig = {
prop_1: {
prop_1_1: "prop_1_1",
prop_1_2: "prop_1_2"
},
prop_2: {
prop_2_1: "prop_2_1",
prop_2_2: "prop_2_2"
},
...props.dummyConfig
}
// dummyConfig will now be a merge with your props, and "default value"
return <div className="App"></div>;
}
App.defaultProps = {
systemConfig: {},
applicationConfig: {},
dummyConfig: {}
};
App.propTypes = {
systemConfig: PropTypes.object.isRequired,
applicationConfig: PropTypes.object.isRequired
};
If you want your state to change based on the props that are passed in, you could do something like:如果您希望根据传入的道具更改状态,您可以执行以下操作:
const defaultDummyConfig = {
prop_1: {
prop_1_1: "prop_1_1",
prop_1_2: "prop_1_2"
},
prop_2: {
prop_2_1: "prop_2_1",
prop_2_2: "prop_2_2"
},
}
function App(props) {
//test
const [ dummyState, setDummyState ] = useState({
...defaultDummyConfig,
...props.dummyConfig
});
// update the new state if the prop ever changes
// this way, dummyState will always contain what you want (if it's your desired effect)
useEffect(() => {
setDummyState({...defaultDummyConfig, props.dummyConfig})
}, [props.dummyConfig])
return <div className="App"></div>;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.