反応するのは初めてで、これは誰かにとって簡単な質問になると思いますが、この問題に答える特定の質問を見つけることができません。私はreactチュートリアルを行い、その後、Webページにさらにいくつかの機能ボタンを追加して自分自身をテストすることにしました。まず、Webページは次のようになります。
私がやりたいのは、合計数の横にすべてのカウンターの合計数(配列のサイズなどが異なる場合があります)を表示することです。現在、私は次のようにしています:まず、私のナビゲーションバーコンポーネント:
const NavBar = ({ totalCounters }, { totalCount }) => {
return (
<nav className="navbar navbar-light bg-light">
<a className="navbar-brand" href="www.thisisirellevant.com">
Navbar{" "}
<span className="badge badge-pill badge-secondary">
# of Nonzero Counters: {totalCounters}
</span>
<span className="badge badge-pill badge-secondary m-2">
Total Count: {totalCount}
</span>
</a>
</nav>
);
};
そして今、私がこれを親でどのようにレンダリングしているか:
const sum = this.sumValues();
return (
<React.Fragment>
<NavBar
totalCounters={this.state.counters.filter((c) => c.value > 0).length} //this is a little different becuase we made it a functional component (it only raises events)
totalCount={sum}
/>
(フラグメント全体は表示されませんが、フラグメントは最終的に閉じます)そして最後に、Appクラスで作成したsum関数:
sumValues() {
var sum = 0;
var counter;
for (counter in this.state.counters) {
sum += counter["value"];
}
return sum;
}
合計数が表示されない理由を誰かに教えてもらえますか?すべてを正しく渡し、sum関数から整数を返しているように感じますが、上の画像からわかるように、その場所には何もレンダリングされていません。そのような初心者の質問をお詫び申し上げます。皆さんありがとう!
コンポーネントの明らかな({ totalCounters }, { totalCount })
間違いは別として、合計を計算するときにループNavBar
を使用することをお勧めしfor of
ます。
例
const { Component, useState, useEffect } = React;
const NavBar = ({ totalCounters, totalCount, isComputing }) => {
return <div>
<div>Counters: {totalCounters}</div>
{isComputing ? <div>Computing count...</div> : <div>Count: {totalCount}</div>}
</div>
}
class App extends Component {
constructor(props) {
super(props);
this.sumValues = this.sumValues.bind(this);
this.state = {
count: -1,
isComputing: true,
counters: Array(Math.floor(Math.random() * 10)).fill(0).map((pr, index) => ({value: index}))
}
this.mounted = false;
}
componentDidMount() {
this.mounted = true;
setTimeout(() => {
const count = this.sumValues();
const isComputing = false;
if(this.mounted) {
this.setState(state => ({...state, count, isComputing}))
}
}, 300);
}
componentWillUnmount() {
this.mounted = false;
}
sumValues() {
let sum = 0;
const { counters } = this.state;
for (let { value } of counters) {
sum += value;
}
return sum;
}
render() {
const { counters, count, isComputing } = this.state;
return <div>
<NavBar
totalCounters={counters.filter((c) => c.value > 0).length}
totalCount={count}
isComputing={isComputing}
/>
</div>
}
}
ReactDOM.render(
<App />,
document.getElementById('root')
);
<script src="https://unpkg.com/react/umd/react.development.js"></script>
<script src="https://unpkg.com/react-dom/umd/react-dom.development.js"></script>
<script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
<div id="root"></div>
理想的にはcount
、計算を保存できる別の状態を追加します。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加