React code to build shopping cart
$begingroup$
I have built a basic shopping cart simulator. All it does is add and remove items between two different basket (i.e. aisle vs basket).
While working on the problem I started to think about the approach and would love to hear what people think.
- Avoid initializing the state empty state in the constructor. However, I had to initialize
shoppingCart:
incomponentDidMount
hook to avoid type error. What is the better and cleaner approach? - Is it good practice to keep the logic simple in
handleXXXClicks
, separation of concern one for handlingitems
and one forshoppingCart
? - I feel
aisleList
andcartList
bloated and I could have writtenitemComponent
which is avoidable duplicate code. - Is there any better way to handle the item in
setState
? I couldn't think of usingprevState
in my scenario.
Use setState
without initializing state
:
componentDidMount() {
// assuming data comes from API fetch
let items = ["banana", "eggs", "bread", "apple"];
this.setState({
items,
shoppingCart: // had to set this empty to avoid typeerror
});
}
Handle handleClick
and setState
:
handleCartClick = event => {
let newList = this.state.shoppingCart.filter(item => {
return item !== event.target.value;
});
this.setState({
items: [...this.state.items, event.target.value],
shoppingCart: [...newList]
});
};
Gist link
Demo link
javascript ecmascript-6 react.js e-commerce react-native
New contributor
$endgroup$
add a comment |
$begingroup$
I have built a basic shopping cart simulator. All it does is add and remove items between two different basket (i.e. aisle vs basket).
While working on the problem I started to think about the approach and would love to hear what people think.
- Avoid initializing the state empty state in the constructor. However, I had to initialize
shoppingCart:
incomponentDidMount
hook to avoid type error. What is the better and cleaner approach? - Is it good practice to keep the logic simple in
handleXXXClicks
, separation of concern one for handlingitems
and one forshoppingCart
? - I feel
aisleList
andcartList
bloated and I could have writtenitemComponent
which is avoidable duplicate code. - Is there any better way to handle the item in
setState
? I couldn't think of usingprevState
in my scenario.
Use setState
without initializing state
:
componentDidMount() {
// assuming data comes from API fetch
let items = ["banana", "eggs", "bread", "apple"];
this.setState({
items,
shoppingCart: // had to set this empty to avoid typeerror
});
}
Handle handleClick
and setState
:
handleCartClick = event => {
let newList = this.state.shoppingCart.filter(item => {
return item !== event.target.value;
});
this.setState({
items: [...this.state.items, event.target.value],
shoppingCart: [...newList]
});
};
Gist link
Demo link
javascript ecmascript-6 react.js e-commerce react-native
New contributor
$endgroup$
add a comment |
$begingroup$
I have built a basic shopping cart simulator. All it does is add and remove items between two different basket (i.e. aisle vs basket).
While working on the problem I started to think about the approach and would love to hear what people think.
- Avoid initializing the state empty state in the constructor. However, I had to initialize
shoppingCart:
incomponentDidMount
hook to avoid type error. What is the better and cleaner approach? - Is it good practice to keep the logic simple in
handleXXXClicks
, separation of concern one for handlingitems
and one forshoppingCart
? - I feel
aisleList
andcartList
bloated and I could have writtenitemComponent
which is avoidable duplicate code. - Is there any better way to handle the item in
setState
? I couldn't think of usingprevState
in my scenario.
Use setState
without initializing state
:
componentDidMount() {
// assuming data comes from API fetch
let items = ["banana", "eggs", "bread", "apple"];
this.setState({
items,
shoppingCart: // had to set this empty to avoid typeerror
});
}
Handle handleClick
and setState
:
handleCartClick = event => {
let newList = this.state.shoppingCart.filter(item => {
return item !== event.target.value;
});
this.setState({
items: [...this.state.items, event.target.value],
shoppingCart: [...newList]
});
};
Gist link
Demo link
javascript ecmascript-6 react.js e-commerce react-native
New contributor
$endgroup$
I have built a basic shopping cart simulator. All it does is add and remove items between two different basket (i.e. aisle vs basket).
While working on the problem I started to think about the approach and would love to hear what people think.
- Avoid initializing the state empty state in the constructor. However, I had to initialize
shoppingCart:
incomponentDidMount
hook to avoid type error. What is the better and cleaner approach? - Is it good practice to keep the logic simple in
handleXXXClicks
, separation of concern one for handlingitems
and one forshoppingCart
? - I feel
aisleList
andcartList
bloated and I could have writtenitemComponent
which is avoidable duplicate code. - Is there any better way to handle the item in
setState
? I couldn't think of usingprevState
in my scenario.
Use setState
without initializing state
:
componentDidMount() {
// assuming data comes from API fetch
let items = ["banana", "eggs", "bread", "apple"];
this.setState({
items,
shoppingCart: // had to set this empty to avoid typeerror
});
}
Handle handleClick
and setState
:
handleCartClick = event => {
let newList = this.state.shoppingCart.filter(item => {
return item !== event.target.value;
});
this.setState({
items: [...this.state.items, event.target.value],
shoppingCart: [...newList]
});
};
Gist link
Demo link
javascript ecmascript-6 react.js e-commerce react-native
javascript ecmascript-6 react.js e-commerce react-native
New contributor
New contributor
edited 7 mins ago
Jamal♦
30.5k11121227
30.5k11121227
New contributor
asked 19 mins ago
Mad-DMad-D
1011
1011
New contributor
New contributor
add a comment |
add a comment |
0
active
oldest
votes
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "196"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Mad-D is a new contributor. Be nice, and check out our Code of Conduct.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216618%2freact-code-to-build-shopping-cart%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
Mad-D is a new contributor. Be nice, and check out our Code of Conduct.
Mad-D is a new contributor. Be nice, and check out our Code of Conduct.
Mad-D is a new contributor. Be nice, and check out our Code of Conduct.
Mad-D is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216618%2freact-code-to-build-shopping-cart%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown