将数组传递给 React 无状态组件
Passing array into React stateless component
以下 Learn ReactJS 书中的示例,我尝试以相同方式传递数组只会产生错误。
来自作者的 Github 示例:https://github.com/MoonHighway/learning-react/blob/master/chapter-04/03-react-components/04-components.html
const IngredientsList = ({items}) =>
React.createElement("ul", {className: "ingredients"},
items.map((ingredient, i) =>
React.createElement("li", { key: i }, ingredient)
)
)
const items = [
"1 lb Salmon",
"1 cup Pine Nuts",
"2 cups Butter Lettuce",
"1 Yellow Squash",
"1/2 cup Olive Oil",
"3 cloves of Garlic"
]
ReactDOM.render(
React.createElement(IngredientsList, {items}, null),
document.getElementById('react-container')
)
我用 create-react-app
搭建了一个 React 应用,并在 App.js 中写了以下内容:
const things = [
'foo',
'bar',
'baz',
'fizz',
'buzz'
];
const App = ({things}) =>
React.createElement("ul",{className: "thingsAndStuff"},
things.map((item, value) =>
React.createElement("li", {key:value}, item)
)
);
在 index.js 我有 ReactDom.render 作为:
ReactDOM.render(React.createElement(App, null, null), document.getElementById('root'));
我收到一个错误 "things.map not a function"。
当我删除结构化的 things
(const App = () => ...
) 时,我的组件工作了。
我的问题是:
1. things
是如何被拉入 App() 的,当两者都用 const
声明并且可以想象不在同一范围内时,things
没有专门传递到函数中?
2. 如果我做了一些不同的事情,示例代码对我有用吗?
谢谢!
使用 createElement
时 props 被传递到组件中:
React.createElement(App, /*props:*/ { things });
第一个片段就是这样做的。第二个不是,因此局部变量 things
将是 undefined
,因此您不能迭代它。如果你想访问一个全局变量,你只需要确保没有同名的局部变量,所以这也行得通:
const App = () => React.createElement("ul",
{ className: "thingsAndStuff" },
things.map((item, value) =>
React.createElement("li", {key:value}, item)
)
);
以下 Learn ReactJS 书中的示例,我尝试以相同方式传递数组只会产生错误。
来自作者的 Github 示例:https://github.com/MoonHighway/learning-react/blob/master/chapter-04/03-react-components/04-components.html
const IngredientsList = ({items}) =>
React.createElement("ul", {className: "ingredients"},
items.map((ingredient, i) =>
React.createElement("li", { key: i }, ingredient)
)
)
const items = [
"1 lb Salmon",
"1 cup Pine Nuts",
"2 cups Butter Lettuce",
"1 Yellow Squash",
"1/2 cup Olive Oil",
"3 cloves of Garlic"
]
ReactDOM.render(
React.createElement(IngredientsList, {items}, null),
document.getElementById('react-container')
)
我用 create-react-app
搭建了一个 React 应用,并在 App.js 中写了以下内容:
const things = [
'foo',
'bar',
'baz',
'fizz',
'buzz'
];
const App = ({things}) =>
React.createElement("ul",{className: "thingsAndStuff"},
things.map((item, value) =>
React.createElement("li", {key:value}, item)
)
);
在 index.js 我有 ReactDom.render 作为:
ReactDOM.render(React.createElement(App, null, null), document.getElementById('root'));
我收到一个错误 "things.map not a function"。
当我删除结构化的 things
(const App = () => ...
) 时,我的组件工作了。
我的问题是:
1. things
是如何被拉入 App() 的,当两者都用 const
声明并且可以想象不在同一范围内时,things
没有专门传递到函数中?
2. 如果我做了一些不同的事情,示例代码对我有用吗?
谢谢!
使用 createElement
时 props 被传递到组件中:
React.createElement(App, /*props:*/ { things });
第一个片段就是这样做的。第二个不是,因此局部变量 things
将是 undefined
,因此您不能迭代它。如果你想访问一个全局变量,你只需要确保没有同名的局部变量,所以这也行得通:
const App = () => React.createElement("ul",
{ className: "thingsAndStuff" },
things.map((item, value) =>
React.createElement("li", {key:value}, item)
)
);